繁体   English   中英

动态注册侦听器

[英]Dynamically register listeners in swing

我创建了可以动态填充组件的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 

在这种情况下,combobox [cb2]将根据从cb1中选择的值进行填充,最终第三个组合框将根据从cb2中选择的值进行填充。 怎么了

异常非常明显:显然,您将字符串放入了第一个组合框对象(在此处未显示的代码中)。

字符串对象永远不能转换为(SomeObject)类。

因此,有两种方法可以解决此问题:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM