如何从作为参数传递给方法的JList中删除元素?

时间:2017-11-03 23:23:32

标签: java swing jlist

public static void removeItems(JList newMenuItemsList)  {
    DefaultListModel listModel = (DefaultListModel) newMenuItemsList.getModel();
    listModel.removeAllElements();       
}

当我运行此代码时,我得到了一个删除

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: 
     javax.swing.JList$3 cannot be cast to javax.swing.DefaultListModel

我怎样才能克服这一点。

1 个答案:

答案 0 :(得分:2)

在我看来,您正在使用类似以下代码的数组创建JList:

String[] numbers = { "1001", "1002", "1003" };
JList list1 = new JList<String>( numbers );

如果使用数组作为参数创建JList,则JList会为您创建ListModel的简单实现。此模型将是静态的,无法更改。这就是为什么你看到JList$3作为模型的类名。

如果您想要动态ListModel,那么您需要使用动态模型。

一种简单的方法是使用DefaultComboBoxModel。它允许您在创建DefaultComboBoxModel

的实例时使用数组
DefaultComboBoxModel model = new DefaultComboBoxModel(numbers);
JList list2 = new JList<String>( model );

如果您想使用DefaultListModel,则需要创建DefaultListModel,然后将数组中的每个项目分别加载到模型中。

DefaulListModel model2 = new DefaultListModel();
JList list2 = new JList<String>( model2 );

for (String number: numbers)
    model2.addElement( number );