8

当我打电话JList<String>.getModel()并将其转换为它时,DefaultListModel<String>它会给我这个例外。

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

抛出它的代码:

private JList<String> list = new JList<String>();
((DefaultListModel<String>) list.getModel()).addElement(...);

It doesn't do it every time though. Most of the time it works perfectly, but other times it throws this exception. I don't understand why this is happening. Is there anything I can do to stop this from happening?

4

4 回答 4

16

我遇到了这个问题。我发现了这个简单的解决方法:

//----instantiation----

    JList mList = new JList();
    mList.setModel(new DefaultListModel());

    /*---- do whatever you want---- */

    //Retain it wherever you want with
    DefaultListModel model = (DefaultListModel)mList.getModel();
于 2012-08-03T19:59:45.130 回答
10

如果您使用的是 NetBeans

  1. 选择您的jList
  2. 属性中,单击模型按钮
  3. 选择“自定义代码”选项
  4. new DefaultListModel ()

jList自定义代码

于 2015-03-17T19:44:24.050 回答
6

你不应该假设它是一个 DefaultListModel。使用接口 ListModel。JList 正在返回 ListModel 的内部实现。

如果您需要访问底层模型,您应该创建它,在 JList 构造函数中设置它并自己保留它。

于 2012-04-29T19:35:55.623 回答
1

JList<String>.getModel(),你必须初始化你的对象之前JList<String>.setModel(new DefaultModelList())

于 2013-09-18T04:58:55.047 回答