【问题标题】:error casting JList to DefaultListModel [duplicate]将 JList 转换为 DefaultListModel 时出错 [重复]
【发布时间】: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


【解决方案1】:
(DefaultListModel)list.remove(j); 

list.remove() 返回从列表中删除的项目,在您的情况下是一个字符串。为什么要将它转换为 DefaultListModel?

或者你真的是说

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

将“list”转换为 DefaultListModel,然后调用该模型的 remove() 方法。但是“list”已经被声明为 DefaultListModel,所以强制转换是多余的。 摆脱演员阵容。

【讨论】:

  • 我在你提到的那一行去掉了演员,代码仍然产生错误。
猜你喜欢
  • 2013-10-09
  • 1970-01-01
  • 2022-06-28
  • 2012-08-21
  • 2013-08-08
  • 2015-08-03
  • 1970-01-01
  • 1970-01-01
  • 2021-04-28
相关资源
最近更新 更多