2016-07-22 37 views
0

我已經實現了一個按鈕,它將簡單地刪除JList contactList中的「contact」。程序應該做的是,如果按鈕刪除「Broadcast」(這是contactList中的第一個元素),將通過輸出顯示消息返回錯誤。否則,它應該只是從聯繫人列表中刪除聯繫人。錯誤將JList轉換爲DefaultListModel

我的問題是如何正確使用DefaultListModel從JList中刪除聯繫人?我看到需要使用DefaultListModel,因爲remove函數不在JList或ListModel中。

大小爲4的例子中的聯繫人列表可能是什麼樣子:

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

這是錯誤:

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

代碼:

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

..你的問題是什麼?你知道編譯器消息的含義嗎?請在這裏寫一篇文章之前研究一下(當你到達那個階段 - 形成一個*特定*問題。 –

回答

0
(DefaultListModel)list.remove(j); 

list.remove ()返回從列表中刪除的項目,在你的項目中大小寫是一個字符串。你爲什麼將它轉換爲DefaultListModel?

還是你真正的意思

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

它蒙上「名單」的DefaultListModel,然後調用模型的remove()方法。但是「list」已經被聲明爲DefaultListModel,所以轉換是多餘的。 只需擺脫演員。

+0

我擺脫了你提到的那一行,並且代碼仍然產生錯誤。 – whuang