2017-11-03 83 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); 
相關問題