如何从作为参数传递给方法的JList中移除元素?
问题描述:
public static void removeItems(JList newMenuItemsList) {
DefaultListModel listModel = (DefaultListModel) newMenuItemsList.getModel();
listModel.removeAllElements();
}
我得到一个错误时抛出,当我运行这段代码如何从作为参数传递给方法的JList中移除元素?
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException:
javax.swing.JList$3 cannot be cast to javax.swing.DefaultListModel
我怎样才能克服这一点。
答
看起来像你对我都是使用数组的代码像创建JList的:如果你使用一个数组作为参数,则JList
创建一个简单的执行ListModel
的创建JList
String[] numbers = { "1001", "1002", "1003" };
JList list1 = new JList<String>(numbers);
您。此模型将是静态的,不能更改。这就是为什么你会看到JList$3
作为模型的类名称。
如果你想动态ListModel
那么你需要使用动态模型。
一个简单的方法是使用DefaultComboBoxModel
。它允许您在创建DefaultComboBoxModel
的实例时使用Array。
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);
您的JList似乎没有使用DefaultListModel。如果你需要这样做,为什么不给它一个? –
通过不假定JList的模型是DefaultListModel类型。或者只有在你确定它是一个DefaultListModel的情况下做出这个假设,因为你已经在这个JList中设置了模型,并且它的类型是DefaultListModel。 –
考虑提供[最小,完整和可验证示例](https://stackoverflow.com/help/mcve)。这将减少猜测工作,并促进更好地回答你的问题 – MadProgrammer