2016-07-22 28 views
0

Ich habe eine Schaltfläche implementiert, die einfach einen "Kontakt" in der JList-Kontaktliste löscht. Was das Programm tun soll, ist, wenn die Schaltfläche "Broadcast" löscht, was das erste Element in der Kontaktliste ist, wird ein Fehler zurückgegeben, indem eine Display-Nachricht ausgegeben wird. Ansonsten soll es den Kontakt einfach aus der Kontaktliste entfernen.Fehler beim Umwandeln von JList in DefaultListModel

Meine Frage ist, wie lösche ich den Kontakt aus der JList mit DefaultListModel korrekt? Ich habe gesehen, dass DefaultListModel verwendet werden muss, da die remove-Funktion nicht in JList oder ListModel ist.

Was das Beispiel der Kontaktliste der Größe 4 aussehen kann:

[Broadcast] 
[Andro] 
[Denis] 
[Micheal] 
... 

Dies ist der Fehler:

[java] Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: javax.swing.JList$4 cannot be cast to javax.swing.DefaultListModel 
... //rest of error 

Code:

private JList<String> listContacts; 

//constructor: 
listContacts = new JList<String>(controller.getContacts()); 
//gets contact list from controller class which gets contact list from client class. 
listContacts.setModel(new DefaultListModel()); 

JButton deleteUser = new JButton("Delete User"); 
menuPanel.add(deleteUser,BorderLayout.EAST); 
deleteUser.addActionListener(new MyButtonListener5()); 

class MyButtonListener5 implements ActionListener{ 
public void actionPerformed(ActionEvent e){ 
    DefaultListModel<String> list = (DefaultListModel)(listContacts.getModel()); 
    String contact = listContacts.getSelectedValue(); 
    int j = -1; 
    for(int i = list.getSize()-1; i >= 0; i--){ 
     if(list.getElementAt(i).equals("Broadcast")) { 
      controller.displayMsg("[ERROR] You cannot delete broadcast\n"); 
     } 
     else if(list.getElementAt(i).equals(contact)){ 
      j = i; 
     } 
    } 
    if(j != -1){ 
     list.remove(j); 
    } 
} 
+1

.. was ist Ihre Frage? Verstehst du, was die Compiler-Nachricht bedeutet? Bitte recherchiere die Dinge, bevor du hier einen Beitrag schreibst (und wenn du zu dieser Phase kommst - formuliere eine * spezifische * Frage. –

Antwort

0
(DefaultListModel)list.remove(j); 

list.remove() gibt das Element zurück, das aus der Liste entfernt wurde Fall ist ein String. Warum werfen Sie es auf ein DefaultListModel?

oder meintest du wirklich

((DefaultListModel<String>)list).remove(j); 

die „Liste“ zu einem DefaultListModel wirft und ruft dann das jeweilige Modell der Methode remove(). Aber "list" ist bereits als DefaultListModel deklariert, daher ist der Cast überflüssig. Nur die Besetzung loswerden.

+0

Ich habe den Cast an der von dir erwähnten Zeile losgeworden und der Code erzeugt immer noch den Fehler. – whuang