【发布时间】:2016-07-22 20:09:28
【问题描述】:
我已经实现了一个按钮,它将简单地删除 JList 联系人列表中的“联系人”。程序应该做的是,如果按钮删除“广播”,这是contactList中的第一个元素,将通过输出显示消息返回错误。否则,它应该只是从联系人列表中删除联系人。
我的问题是如何正确使用 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);
}
}
【问题讨论】:
-
.. 你的问题是什么?您了解编译器消息的含义吗?请先研究一下,然后再在这里发帖(以及当你到达那个阶段时 - 形成一个具体的问题。
标签: java swing actionlistener jlist defaultlistmodel