将JList强制转换为DefaultListModel时出错



我实现了一个按钮,它只需删除JList联系人列表中的一个"联系人"。该程序应该做的是,如果按钮删除"Broadcast"(联系人列表中的第一个元素),则会通过输出显示消息返回错误。否则,它应该只是从联系人列表中删除联系人。

我的问题是如何正确使用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 broadcastn");
        }
        else if(list.getElementAt(i).equals(contact)){
            j = i;
        }
    }
    if(j != -1){
        list.remove(j); 
    }
}
(DefaultListModel)list.remove(j); 

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

或者你真的是指

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

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

相关内容

  • 没有找到相关文章

最新更新