JList einträge Zur Laufzeit Hinzu

Hallo, ich möchte wie der Name Schon Sagt in meine JList einträge zur laufzeit Hinzufügen hier ist mal mein code

          Iterator<FtpDirEntry> i = client.listFiles(dir);
          LinkedList<String> list = new LinkedList<String>();
          
          DefaultListModel lm = (DefaultListModel) jList1.getModel();
          
          
          while(i.hasNext()){
            	fde = i.next();
                list.add(fde.getName());
                System.out.println(fde.getName());
                lm.addElement(fde.getName());
                
           }
          
          jList1.setModel(lm);
          
          }```

und der Fehler

```Exception in thread "AWT-EventQueue-1" java.lang.ClassCastException: javax.swing.JList$3 cannot be cast to javax.swing.DefaultListModel
	at ftpuploadapplet.main.jButton2ActionPerformed(main.java:235)
	at ftpuploadapplet.main.access$100(main.java:34)
	at ftpuploadapplet.main$2.actionPerformed(main.java:151)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
	at java.awt.Component.processMouseEvent(Component.java:6505)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
	at java.awt.Component.processEvent(Component.java:6270)
	at java.awt.Container.processEvent(Container.java:2229)
	at java.awt.Component.dispatchEventImpl(Component.java:4861)
	at java.awt.Container.dispatchEventImpl(Container.java:2287)
	at java.awt.Component.dispatchEvent(Component.java:4687)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
	at java.awt.Container.dispatchEventImpl(Container.java:2273)
	at java.awt.Component.dispatchEvent(Component.java:4687)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
	at java.awt.EventQueue.access$200(EventQueue.java:103)
	at java.awt.EventQueue$3.run(EventQueue.java:694)
	at java.awt.EventQueue$3.run(EventQueue.java:692)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
	at java.awt.EventQueue$4.run(EventQueue.java:708)
	at java.awt.EventQueue$4.run(EventQueue.java:706)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
BUILD SUCCESSFUL (total time: 16 seconds)```

Danke im Voraus

Und hast du die Fehlermeldung mal gelesen?

Wie dir die Fehlermeldung sagt: das Model das du zurückbekommst ist nicht von dem von dir erwarteten Typ. Die Lösung: beim initiieren der GUI musst du selber das Model setzen.

Hab schon länger nicht mehr mit Swing gearbeitet, aber den Aufruf setModel dürftest du dir sparen können - sobald du dem Model einen Eintrag hinzufügst sollte die View das mitbekommen.

Wenn er die List mit dem Default-Konstruktor, dem Array-Konstruktor oder dem Vektor-Konstruktor erstellt bekommt sie ein readonly-model (genauer eine Anonyme instanz von [japi]AbstractListModel[/japi]).
Gruß

Danke für eure Antworten, aber
Was müsste ich nun machen damit ich einträge während der Laufzeit hinzufügen Kann ??

Hab ich doch schon geschrieben:

Auf AbstractListModel casten.

Bringt ihm ja nichts, wenn es readonly ist :wink:

@Tomate_Salat
Sry für die Blöde frage, aber wie setze ich selber das model

Hast du doch schon gemacht in deinem geposteten Code (setModel). Was du tun musst ist einfach früher schon ein Model zu setzen (z.B. direkt nach dem erstellen des JLists).

Stimmt dann aber auch nicht, da man das Model nicht neu setzen sollte.

Besser wäre etwas in der Richtung:

DefaultListModel<Foo> listModel = new DefaultListModel<Foo>();
JList<Foo> list = new JList<Foo>(listModel);

//elemente zu listModel hinzufügen, das Model informiert die Liste über Änderungen
listModel.addElement(new Foo());

Gruß

@Andy16823 : der setModel-Aufruf wirkt auf mich, als hättest du noch ein Verständnisproblem, wie das genau mit den Objekten funktioniert. Mit dem getModel bekommst du eine Referenz auf das Modell-Objekt zurück und kannst es verändern. In der JList befindet sich dasselbe (!) Objekt, was bedeutet, dass die Änderungen auch innerhalb der JList stattgefunden haben.

Dass du vorher ein Modell setzen musst, welches du auch ändern darfst, ist noch einmal eine andere Sache. Dazu erweiterst du entweder die AbstractListModel-Klasse, oder du verwendest einfach DefaultListModel.

P. S.: gehört der Thread nicht eher in: http://forum.byte-welt.net/forumdisplay.php?f=99 ?

Stimmt ist mir noch gar nicht aufgefallen - habe das mal verschoben.

Danke an euch,

@Tomate_Salat hab es So gemacht wie du gesagt hast, ich hab das Model als Klassen Variable oder wie man das nennt Deklariert und dann einfach bei der Initialisierung das model neun Gesetzt etwa so

 lm = new DefaultListModel();
 jList1.setModel(lm);```

und So Deklariert 

public class main extends javax.swing.JApplet {
public DefaultListModel lm;

/ …


Gruß Andy

Ein paar kleinere Verbesserungen:

-mach die Variable nicht public sondern private
-nenn die Variable “listModel” oder nach den Objekten die sie darstellt ist z.B. “openTaskListModel”
-gleiches für die Liste, “jList1” ist genauso aussagekräftig wie eine verschlossene Kiste in einem Großlager auf der “Box1” steht.
-Klassennamen immer UpperCamelCase, in dem Fall “Main”

Gruß