Ach, ich sehe gerade ein wichtiges Detail: Die Klasse List ist ein Gui Element.
Sprich: Du hast eine Klasse List, welche nicht rein eine Liste von Tasks verwalten soll sondern die Klasse dient dem Anzeigen von Tasks und ist daher eine UI Komponente. Daher das Hinzufügen der Liste zu der UI:
this.add(list,BorderLayout.CENTER);
Und daher auch die Fehlermeldung, dass Du versuchst einen Task hinzu zu fügen aber die add Methode nur UI Komponenten in der add Methode entgegen nehmen möchte.
Daher muss man hier doch noch deutlich mehr ausholen fürchte ich.
Generell sollte man in Anwendungen Daten und Anzeige trennen. Das bedeutet, dass Du unabhängig von einem Frontend die Daten definieren solltest. Das ist das, was man oft Datenklassen oder Entities nennt sowie die Klassen rund um die Verwaltung.
Darauf setzt dann die UI auf.
Das kann dann bei Dir etwas sein wie:
- Du hast die Klasse Task, die die Daten eines Tasks enthält.
- In der Anwendung hast du dann eine List<Task> die alle Tasks der laufenden Anwendung vorhält.
In der UI hast Du dann von mir aus eigenständige Controls:
- Ein TaskControl - dieses könnte dann eine Swing Komponente sein, die eine Instanz von Task übergeben bekommt und dann diesen Task anzeigt. Änderung an der UI würden dann in diese Instanz übertragen...
- Dann kannst Du auch ein Control haben, dass eine Liste von Tasks anzeigt. Das wäre dann ähnlich: Dieses TaskListControl bekommt eine List<Tasks> übergeben. Die Tasks werden angezeigt, in dem für jeden Task in der Liste dann Instanzen der Klasse TaskControl erzeugt werden.
Das Zusammenspiel zwischen UI und Daten ist dann aber noch wichtig. So soll die UI ja Änderungen an den Daten anzeigen können. Dazu kann man dann das Observer Pattern ansehen. Das ObserverPattern besagt lediglich, dass bei Änderungen ein Event ausgelöst wird, das dann von der UI verwendet werden kann, um die Änderungen an den Daten zu übernehmen.
Das wäre die saubere Trennung, die man sich ansehen könnte.
Die evtl. für Dich einfachere Lösung könnte aber sein, dass die Daten in den Controls selbst gekapselt sind. D.h. deine Klasse List verwaltet intern die Tasks. Dann musst Du lediglich eine Methode
public void addTask(Task task)
hinzufügen. In der Methode kannst Du dann den Task in den Daten hinzu nehmen und darstellen.
Hier wird es aber problematisch, da Du ja nicht mitbekommst, wenn der Task nach der Übergabe noch geändert wird und so. Das ist also eine Lösung, die nur auf den ersten Blick einfach scheint, aber die schnell an gewisse Grenzen stößt und die auch schnell deutlich komplexer wird.