簡體   English   中英

將組件數組(panel.getComponents())存儲到數組列表

[英]Storing array of Components(panel.getComponents()) to Array List

我有3個復選框,並計划添加更多復選框,我需要確定是否已選中。 所以我要做的就是將它們放在JCheckBox的ArrayList中。 順便說一句,我正在使用SMALLINT apache derby數據類型,該類型不適用於preparedStatement.getBoolean() ;

ArrayList<JCheckBox> homeCbxs = new ArrayList<>();
homeCbxs.add(updateUserNameCheckBox); // 0
homeCbxs.add(updatePasswordCheckBox); // 1
homeCbxs.add(updatePhotoCheckBox); // 2

int x = 0; 
for(JCheckBox cb : homeCbxs){
    Boolean bool;
    bool = cb.isSelected();
    //preparedStatement here, ps.setInt(x,bool)
    x++;
}

我以為也許可以使用getComponents()方法返回一個組件數組,以便可以將面板中的所有復選框都獲取到。

也許像

ArrayList<JCheckBox> homeCbxs = homePermssionsCheckBoxPanel.getComponents();

與其一一添加,

homeCbxs.add(updateUserNameCheckBox); // 0
homeCbxs.add(updatePasswordCheckBox); // 1
homeCbxs.add(updatePhotoCheckBox); // 2

但是,問題是ArrayList<JComponents>將不接受數組。 我收到一條錯誤消息,指出類型不兼容:Component []無法轉換為ArrayList<JCheckBox>

你有什么建議嗎? 強制轉換或進行某些轉換的任何解決方法。 我只是想縮短代碼行。 :d

另外,我想問一下getComponents()將0分配為其數組的第一個索引。

我將不勝感激。

創建您自己的實用程序方法以獲取組件。

public List<Component> getComponentsAsList (Container cont){
    return Stream.of(cont.getComponents())
                 .collect(Collectors.toList());
}

然后,您不必忘記將它們JCheckBox轉換為JCheckBox來檢查是否已選中它們。

List<Component> list = getComponentsAsList(homePermssionsCheckBoxPanel);

for(Component c : list){
    if (!(c instanceof JCheckBox)) continue;
    if (((JCheckBox)c).isSelected()){
        // doStuff
    }
}

public List<Component> getComponentsAsList (Container cont){
    List<Component> tmp = new ArrayList<>();
    for (Component c : cont.getComponents()) {
        tmp.add(c);
    }
    return tmp;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM