Swing JList elemente hinzufügen

Tobse

Top Contributor
Hi Leutz!
Erstmal hallo 😉
Ich habe vor kurzem Java gelernt. Und ich weis, eig. müsste sowas ja in das Basics-Forum, aber ich war mir n bissl unsicher. Bitte nich übel nehmen, bei bedarf einfach verscheiben.
Ich würde gerne einer JList ein Element hinzufügen, is ja gelacht. Funktioniert im test auch, aber dort wo ichs dann haben will natürlich wieder net.
Java:
        JList list=new JList();
        list.setModel(new DefaultListModel());
        DefaultListModel listmodel=(DefaultListModel) list.getModel();
        JScrollPane scrollp=new JScrollPane(list);
        scrollp.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
        scrollp.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        frame.add(scrollp);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        listmodel.add(0,new listaddment());
        listmodel.add(0,new listaddment());
        listmodel.add(0,new listaddment());
        listmodel.add(0,new listaddment());
        listmodel.add(0,new listaddment());
Einwandfrei.
Aber hier... ich hab kein plan warums da blockt:
Java:
JList jlist=(JList) paskeys.getList("list");
            DefaultListModel listmodel=(DefaultListModel) jlist.getModel();
            listmodel.add(0, new String(newPw));
            System.out.println(newPw);

P.S.: Den Code lässt der Compiler ohne murren durch, keine Laufzeitfehler, das System.out.println() komtm auch.
 
bau testweise
if (true) {
throw new RuntimeExecption("test");
}
ein, wenn diese Exception nicht sauber geloggt wird, dann vielleicht andere, die auftreten, auch nicht

-----

wurde anfangs nicht explizit ein DefaultListModel gesetzt, dann hat die JList ein anderes Model -> ClassCastException,
versuche auch den Klassennamen des Models auszugeben

edit:
> das System.out.println() komtm auch.
hmm, mist, dann bringen meine beiden Tipps wohl nix, zum Ausgleich poste ich gleich noch ein lauffähiges Testprogramm,
alles andere muss irgendwo in deinem restlichen Code stecken, nicht im geposteten Ausschnitt
(z.B. immer gerne: doppelte GUI-Objekte, eins wird geändert, das andere alte unveränderte ist auf dem Bildschirm zu sehen)

edit2:
Java:
public class TestGUI   extends JFrame {

    public TestGUI()    {
        final JList jlist = new JList(new DefaultListModel());
        JButton b = new JButton("Test");
        b.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e)    {
                    DefaultListModel listmodel = (DefaultListModel)jlist.getModel();
                    listmodel.add(0, "xy");
                    System.out.println("geht");
                }
            });
        JScrollPane sp = new JScrollPane(jlist);
        add(sp);
        add(b, BorderLayout.SOUTH);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(230, 200);
        setVisible(true);
    }
    public static void main(String[] args)   {
        new TestGUI();
    }
}
 
Zuletzt bearbeitet von einem Moderator:
Hm, also dein bsp klappt einwadnfrei, ich gebe das ganze so an:
Java:
JList returnlist=new JList(pwarray);
returnlist.setModel(new DefaultListModel());
Ich hab das jetzt mal so umgestellt:
Java:
JList returnlist=new JList(new DefaultListModel());
DefaultListModel lmodel=(DefaultListModel) returnlist.getModel();
pw curpw;
for (int i=0;i<alpws.length;i++) {
     curpw=(pw) alpws[i];
     lmodel.add(i, curpw.usage());
}
Es ändert sich aber nichts.
Die Methode toString() hab ich auch überschrieben, ebenfalls keine Änderung.
 
in deinem Code sehe ich keinen Fehler, aber das muss wie gesagt nix heißen

du könntest 10.000 Zeilen korrekten Code posten,
solange nur eine falsche Zeile im restlichen Programm steckt ist das ganz egal,


> Es ändert sich aber nichts.

du erzeugst aber nicht wirklich eine neue JList sondern versuchst schon, eine vorhandene in der GUI zu ändern, oder?
 
Mit der funktion wird eine neue JList erstellt und als JComponent zurückgegeben. Der JComponent ist aber nich in der GUI. Grade beim schreiben isses mir aufgefallen. Ich füg das zeug ja ner unsichtbaren List hinzu.
Jetzt hab ichs umstrukturiert. Im action listener, der das ganze anstößt, wird auf demselbeln objekt, vondem auch die JList hier kommt, eine hinzufügen-Methode aufgerufen. Und die Liste, die zurückkommt, enthält das hinzugefügt Element demnach bereits.
Aber irgendwie kommt die neue Liste nicht her...
Java:
JScrollPane jlist=(JScrollPane) paskeys.getList("pane");
listpanel.add(jlist, BorderLayout.CENTER);
 

Zurück
Oben