动态注册摇摆中的听众

时间:2016-08-31 05:54:41

标签: java swing combobox listener classcastexception

我创建了动态填充组件的UI。 UI就像表,它有X行,但每行有4个组件[1个JLable,3个JComboboxes]。我想为所有组合框注册监听器,从组合框中获取 selectedItem()并将其用于进一步参考。但是,我无法使用现有代码执行此操作。 代码如下。

    for(int i=0; i< list.size(); i++) {
        final int j = i;

        cb1[i] = new JCombobx();
        masterPanel[i].add(cb1[i]);

        cb2[i] = new JCombobx();
        masterPanel[i].add(cb2[i]);

        cb3[i] = new JCombobx();
        masterPanel[i].add(cb3[i]);

            cb1[j].addItem("Select Value");
            for (OtherObject l : List) {
                cb1[j].addItem(l);
            }

        cb1[j].addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                selectedValue = (SomeObject) cb1[j].getSelectedItem();
            }
        }); 
    }

我得到了这个例外:

    java.lang.ClassCastException: java.lang.String cannot be cast to SomeObject 

在此,将根据从cb1中选择的值填充组合框[cb2],最终将根据从cb2中选择的值填充第三个组合框。 它有什么问题?

1 个答案:

答案 0 :(得分:2)

异常非常清楚:显然,你将字符串放入你的第一个组合框对象(在你没有在这里显示的代码中)。

字符串对象可以从不转换为(SomeObject)类。

所以,有两种方法可以解决这个问题:

  1. 您查看实际将值添加到第一个组合框的代码。如果要使用SomeObject
  2. ,该代码应该添加SomeObject的实例
  3. 或者,如果您的第一个框与字符串一起使用是正确的;那么你必须改变当前试图将getSelectedItem()...返回的字符串转换为不投出的代码!