Avatar billede websafe Nybegynder
27. maj 2003 - 09:58 Der er 6 kommentarer

Opdate af JList i GUI.

Hvordan får man en JList til at blive opdateret i en GUI?
Avatar billede magoo20000 Nybegynder
27. maj 2003 - 11:50 #1
Avatar billede websafe Nybegynder
28. maj 2003 - 13:57 #2
magoo>> Det var ikke så meget det jeg søgte... Mit problem er at min actionListener ikke vil opdatere min JList på GUI'en.
Her er kodestykket, der giver problemer:
// v er en Vector
// dlmtemp er en DefaultListModel
// trains er en JList, som implementeres i GUI'en
// Der bliver affyret en event, som kører igennem følgende kode
v.trimToSize();
        int i = 0;
        while (i!=v.size())
            { dlmtemp.addElement(v.elementAt(i));
            System.out.println(i + ": " + dlmtemp.elementAt(i));
            i++;
            }
        i=0;
        this.trains = new JList(dlmtemp);

Så mit spørgsmål er: hvordan får jeg trains til at afspejle den nye værdi i GUI'en?
Avatar billede ulrikm Nybegynder
29. maj 2003 - 16:48 #3
> this.trains = new JList(dlmtemp);

Denne nye JList skal tilføjes din GUI for at blive vist (med en add() metode. Jeg går ud fra at du et andet sted tilføjer "trains" til GUI'en - denne skal fjernes og udskiftes med den nyoprettede - dette sker ikke ved tildeling til variablen "trains". Der er i øvrigt ingen grund til at oprette en ny JList for at tilføje elementer, du kan bare modificere modellen. Her et køreklart eksempel:



class JListExample
{
    public static void main( String[] args )
    {
        javax.swing.JFrame frame = new javax.swing.JFrame();
        final javax.swing.DefaultListModel model = new javax.swing.DefaultListModel();
        javax.swing.JList list = new javax.swing.JList( model );
        javax.swing.JButton addButton = new javax.swing.JButton("Add element");
        addButton.addActionListener
        (
            new java.awt.event.ActionListener()
            {
                private int count = 0;
                public void actionPerformed( java.awt.event.ActionEvent e )
                {
                    model.addElement("hello " + count++ );
                }
            }
        );
        javax.swing.JButton clearButton = new javax.swing.JButton("Remove all elements");
        clearButton.addActionListener
        (
            new java.awt.event.ActionListener()
            {
                public void actionPerformed( java.awt.event.ActionEvent e )
                {
                    model.clear();
                }
            }
        );
        frame.getContentPane().setLayout( new java.awt.BorderLayout() );
        frame.getContentPane().add( new javax.swing.JScrollPane(list), java.awt.BorderLayout.CENTER );
        frame.getContentPane().add( addButton, java.awt.BorderLayout.SOUTH );
        frame.getContentPane().add( clearButton, java.awt.BorderLayout.NORTH );
        frame.pack();
        frame.show();
    }

}
Avatar billede trp79 Nybegynder
30. maj 2003 - 07:56 #4
Nu kan jeg ikke præcis læse af dit problembeskrivelse hvad din problemstiling er. Men som jeg forstår det ønsker du at din JList bliver opdateret når der har været ændringer i den. Det kan du gøre ved at lave en dynamisk jlist. Der et rigtig let og virker fortræffeligt :o) Du kan evt. se hvordan her: http://www.eksperten.dk/spm/342066
Avatar billede tobiashm Nybegynder
02. juni 2003 - 23:13 #5
Hvis du allerede har trains i din GUI, skal du bare bruge

this.trains.setModel(dlmtemp);

(Din kode opretter en ny JList og sætter this.trains til at referere til denne istedet for den tidligere, som er den som er i din GUI)
Avatar billede trp79 Nybegynder
27. juli 2003 - 14:09 #6
Har du fået det til at funke Websafe.........?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester