2012-11-28 50 views
0

我不知道該怎麼問。我正在處理的程序已經完成,但它似乎有過多的代碼。下面是部分代碼:您可以即時創建對JCheckBox對象的引用嗎?

chkDef1 = new JCheckBox 

if (chkDef1.isSelected()) { 
      actual = chkDef1.getText(); 
     } 
else if (chkDef2.isSelected()) { 
      actual = chkDef2.getText(); 
     } 
else if (chkDef3.isSelected()) { 
      actual = chkDef3.getText(); 
     } 
else { 
      actual = chkDef4.getText(); 
     } 

有那裏有很多與chkDef1重複代碼等領域 - 4個複選框。我想要做的是在代碼被複制的地方使用循環,然後使用1賦值語句。

我已經試過: IF(( 'chkDef' +計數器).isSelected())

我還試圖賦予 「 'chkDef' +專櫃」,以可變String,然後加入isSelected。不幸的是我不斷收到錯誤消息。

我是一個新手程序員,所以我不知道我想要做什麼是可能的或者它叫什麼。如果有可能的解釋,將不勝感激。

回答

2

只需創建一個checkboxes的列表並遍歷它。

ArrayList<JCheckBox> checkboxes = new ArrayList<JCheckBox>(); 
//Init your checkboxes array. 

for(JCheckbox chkbox :checkboxes) 
{ 
    if(chkbox.isSelected()) 
    { 
    actual = chkbox.getText() ; break; 
    } 
} 

雖然,可能有一個JCheckbox組可以做你想做的事。

Looks like you can use ButtonGroup並獲取要遍歷它的元素。

+0

+1按鈕組(雖然我建議你'JRadioButton'或'JToggledButton'的按鈕組從使用性的角度) – MadProgrammer

+0

謝謝您的幫助。我確實將它們作爲按鈕組的一部分。我會從數組開始,因爲我明白這是如何工作的,然後使用按鈕組。 – user1793408

2

您可以創建一個包含所有複選框,然後通過數組循環數組...

JCheckBox[] boxes = new JCheckBox[] {chkDef1,chkDef2,chkDef3,chkDef4} 
for (JCheckBox box : boxes) { 
    if (box.isSelected()) { 
     actual = box.getText(); 
     break; // We don't want to loop unnecessarily 
    } 
} 

同樣,你可以創建一個簡單的方法是採用可變數量的參數...

public String getCheckedItem(JCheckBox... boxes) { 
    String actual = null; 
    for (JCheckBox box : boxes) { 
     if (box.isSelected()) { 
      actual = box.getText(); 
      break; // We don't want to loop unnecessarily 
     } 
    } 
    return actual; 
} 

,並調用它像...

String actual = getCheckItem(chkDef1, chkDef2, chkDef3, chkDef4); 

就個人而言,我會返回複選框,但這取決於您

如果您只想維護一個選中的複選框(即不允許選中多個複選框),那麼您應該認真考慮使用JRadioButton s和ButtonGroup來代替。

否則,你可以收集所有的選擇檢查框...

public JCheckBox[] getCheckedItem(JCheckBox... boxes) { 
    List<JCheckBox> selected = new ArrayList<JCheckBox>(boxes.length); 
    for (JCheckBox box : boxes) { 
     if (box.isSelected()) { 
      selected.add(box); 
     } 
    } 
    return selected.toArray(new JCheckBox[selected.size]); 
} 
相關問題