2012-11-17 119 views
4

我想問的是有沒有從JCheckBox獲取信息的方式沒有actionListener。在我的代碼中,我掃描了一個字符串文件,並且每行都有數據,如果選中的話,應該將其添加到我的程序中的數組中。問題是我永遠不知道有多少JCheckBoxes,它取決於文件。因此,我的問題是如何通過按下按鈕(確定)將選定的字符串放入數組(或列表),所以我可以做他們的其他事情(在我的情況下,我需要從文件或從手工輸入並將其放在紅黑樹中,所以我需要將選定的字符串推送到我的putDataInTheTree方法中)。獲取JCheckBox選擇的框值

編輯:另外,是否有可能不顯示那些已經添加到程序的JCheckBoxes? I.E.如果我選擇液體,下次我打電話輸入法液體不會顯示在我的面板?

在此先感謝!

如何看起來:

enter image description here

我的代碼是迄今:

public void input() { 
    try { 
     mainWindow.setEnabled(false); 
     fromFile = new JFrame("Input from file"); 
     fromFile.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); 
     fromFile.setLayout(new BorderLayout()); 
     fromFile.setSize(300,200); 
     panelFromFile = new JPanel(); 
     panelFromFile.setLayout(new java.awt.GridLayout(0,1)); 
     JScrollPane scrollPane2 = new JScrollPane(panelFromFile); 
     scrollPane2.setMaximumSize(new Dimension(300, 180)); 

     FileReader File = new FileReader(data); 
     BufferedReader Buffer = new BufferedReader(File); 
     while ((info = Buffer.readLine()) != null) { 
      if (info != null) { 
       JCheckBox check = new JCheckBox(info); 
       panelFromFile.add(check); 
      } 
     } 
     ok = new JButton("ok"); 
     ok.addActionListener(this); 
     fromFile.add(scrollPane2, BorderLayout.CENTER); 
     fromFile.add(ok, BorderLayout.SOUTH); 
     fromFile.setLocationRelativeTo(null); 
     fromFile.setResizable(false); 
     fromFile.setVisible(true); 
    } 
    catch(Exception e) { 
     text.append("Error in INPUT method"); 
     text.append(System.getProperty("line.separator")); 
    } 
} 

回答

8

你的複選框添加到一個集合,並按下按鈕時,遍歷複選框,並得到與每個選中的複選框關聯的文本:

private List<JCheckBox> checkBoxes = new ArrayList<JCheckBox>(); 
... 
    while ((info = Buffer.readLine()) != null) { 
     if (info != null) { 
      JCheckBox check = new JCheckBox(info); 
      panelFromFile.add(check); 
      this.checkBoxes.add(check); 
     } 
    } 

... 
public void actionPerformed(ActionEvent e) { 
    List<String> infos = new ArrayList<String>(); 
    for (JCheckBox checkBox : checkBoxes) { 
     if (checkBox.isSelected() { 
      infos.add(checkBox.getText()); 
     } 
    } 
    // TODO do something with infos 
} 
+0

感謝解釋,幫助了很多:) –

1

如果您存儲複選框(例如在List)你可以循環它們並在按下OK按鈕時查詢它們的選擇狀態。

爲了從複選框String,你可以選擇使用putClientPropertygetClientProperty方法,如在JComponent類Javadoc