JList.getModel()ClassCastException

Str*_*ies 6 java swing jlist

当我打电话给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
Run Code Online (Sandbox Code Playgroud)

抛出它的代码:

private JList<String> list = new JList<String>();
((DefaultListModel<String>) list.getModel()).addElement(...);
Run Code Online (Sandbox Code Playgroud)

但它并不是每次都这样做.大部分时间它完美地运行,但有时它会抛出这个异常.我不明白为什么会这样.有什么办法可以阻止这种情况发生吗?

Nik*_*ski 14

我遇到过这个问题.我找到了这个简单的解决方法:

//----instantiation----

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

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

    //Retain it wherever you want with
    DefaultListModel model = (DefaultListModel)mList.getModel();
Run Code Online (Sandbox Code Playgroud)


San*_*ues 9

如果您使用的是NetBeans

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

jList自定义代码


dit*_*kin 5

您不应该假设它是DefaultListModel.使用接口ListModel.JList返回ListModel的内部实现.

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