簡體   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