2016-07-07 9 views
1

Dies ist mein erster Beitrag hier, und ich bin sehr grün mit Java. Dies ist etwas, was ich versuche, um mein Java-Wissen zu verbessern.Aktualisieren/Erstellen einer JList

Ich habe eine Schaltfläche, die, wenn sie geklickt wird, ein gemischtes Kartendeck als Jlist erzeugt. Wenn ich erneut drücke, würde ich sehr gerne die JList aktualisieren oder irgendwie neu erstellen. Stattdessen erstellt es einfach eine neue Liste, also habe ich jetzt 2 JLists.

 button1.addActionListener(new ActionListener() 
    { 
     public void actionPerformed(ActionEvent e) 
     { 

      cards.choseCards(); //Creates an ArrayList with the suffled cards 
      JList<String> displayList = new JList<>(cards.deck.toArray(new String[0])); 
      frame.add(displayList); 
      frame.pack(); 
      cards.cleanUpDeck(); //Removes all the cards from the ArrayList 
     } 
    }); 
+0

Die zweite Zeile in der 'actionPerformed() 'method erzeugt eine neue' JList', daher wird bei jedem Drücken der Taste eine neue 'JList' zum Rahmen hinzugefügt. Versuchen Sie, die Liste außerhalb der Methode und der inneren Klasse zu erstellen, und innerhalb der Methode können Sie die Daten aktualisieren. – Dando18

Antwort

2

Der Schlüssel hier ist, dass Schwingen verwenden eine Model-View Art der Struktur ähnlich Model-View-Controller (aber mit Unterschieden), in dem das Modell die Daten, dass die Ansicht (die Komponente) angezeigt hält.

Was machst dir einen völlig neuen JList schafft, aber was wollen Sie ist zu tun, um das Modell des bestehenden und angezeigt JList zu aktualisieren, entweder das, oder ein neues Modell für den gleichen vorhandenen JList erstellen. JLists verwenden ein ListModel für ihren Modus, das häufig als DefaultListModel-Objekt implementiert wird. Daher sollten Sie dieses Modell aktualisieren oder ersetzen, indem Sie beispielsweise ein neues DefaultListModel-Objekt erstellen und es dann in die vorhandene JList einfügen. Rufen Sie dazu die Methode setModel(ListModel model) auf.

Zum Beispiel so etwas wie dies Ihr Code aussehen könnte (mit vielen Vermutungen gemacht, da wir nicht wissen, was Ihr wirklicher Code wie folgt aussieht):

button1.addActionListener(new ActionListener() { 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     // create new model for the JList 
     DefaultListModel<String> listModel = new DefaultListModel<>(); 
     cards.choseCards(); //Creates an ArrayList with the suffled cards 

     // add the cards to the model. I have no idea what your deck field looks like 
     // so this is a wild guess. 
     for (Card card : cards.deck) { 
      listModel.addElement(card.toString()); // do you override toString() for Card? Hope so 
     } 

     // Guessing that your JList is in a field called displayList. 
     displayList.setModel(listModel); // pass the model in 
     cards.cleanUpDeck(); //Removes all the cards from the ArrayList 
    } 
}); 
+0

Ich musste es ein bisschen zwicken, aber das war genau das, was ich brauchte! Vielen Dank für Ihre Hilfe :-) –