2017-11-03 82 views
0
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 

我怎样才能克服这一点。

+0

您的JList似乎没有使用DefaultListModel。如果你需要这样做,为什么不给它一个? –

+0

通过不假定JList的模型是DefaultListModel类型。或者只有在你确定它是一个DefaultListModel的情况下做出这个假设,因为你已经在这个JList中设置了模型,并且它的类型是DefaultListModel。 –

+0

考虑提供[最小,完整和可验证示例](https://stackoverflow.com/help/mcve)。这将减少猜测工作,并促进更好地回答你的问题 – MadProgrammer

回答

2

看起来像你对我都是使用数组的代码像创建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); 
相关问题