【问题标题】:How can I properly use my value as an argument to JComboBox.setModel()?如何正确使用我的值作为 JComboBox.setModel() 的参数?
【发布时间】:2014-08-15 00:29:38
【问题描述】:

在下面的代码中,我尝试创建一个DefaultListModel 对象以用于我的JComboBox

显然,setModel() 方法只接受一个 ComboBoxModel 对象。我试图转换它,但我得到了例外,java.lang.ClassCastException

我已经搜索了如何解决这个特定问题,但找不到任何有用的东西。

然后我尝试创建一个 ComboBoxModel 对象,但我了解到这个类是抽象的。我怎样才能绕过这个问题,并获得setModel() 的有效参数?

private void setComboBoxYears(int numberOfYears, JComboBox comboBox) {
        DefaultListModel<Integer> years = new DefaultListModel<>();
        for(int i = 1; i <= numberOfYears; i++)
            years.addElement(i);
        comboBox.setModel((ComboBoxModel) years);

【问题讨论】:

    标签: java swing exception combobox defaultlistmodel


    【解决方案1】:

    如果您正在寻找解决方案,请尝试以下方式:

    final JComboBox<Integer> comboBox = new JComboBox<Integer>();
    Integer[] years = new Integer[numberOfYears];
    for (int i = 0; i < numberOfYears; i++)
        years[i] = i + 1;
    
    comboBox.setModel(new DefaultComboBoxModel<Integer>(years));
    

    【讨论】:

    • 谢谢,感谢您的解决方案。
    • 不客气。尽量避免 RAW 类型。总是在这里使用泛型作为错过ComboBoxModel。您正在将泛型类型转换为非泛型类型。
    • 对不起,我是新手。什么是 RAW 类型?
    • 没有任何类型,例如缺少类型的new ArrayList()。使其通用,例如 new ArrayList&lt;Integer&gt;() 在此处阅读更多信息 Java Tutorial on generics
    【解决方案2】:
    1. 请改用DefaultComboBoxModel
    2. 请查看 API,因为所有这些信息都可以通过简单的浏览来收集。

    【讨论】:

    • 非常感谢,下次我一定会研究API的。
    猜你喜欢
    • 2020-12-13
    • 1970-01-01
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-30
    相关资源
    最近更新 更多