4

actionListener を使用せずに JCheckBox から情報を取得する方法はありますか。私のコードでは、文字列のファイルをスキャンし、各行にデータがあり、選択した場合、プログラムの配列に追加する必要があります。問題は、JCheckBox がいくつあるかわからないことです。それはファイルに依存します。

だから、私の質問は、ボタンを押すだけで選択した文字列を配列(またはリスト)に入れる方法(OK)です。赤黒のツリーに配置するため、選択した文字列を putDataInTheTree メソッドにプッシュする必要があります)。

編集: また、既にプログラムに追加されている JCheckBox を表示しないことは可能ですか? IE で流体を選択した場合、次に入力メソッドを呼び出したときにパネルに流体が表示されませんか?

前もって感謝します!

見た目:

ここに画像の説明を入力

私のコードはこれまでです:

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"));
    }
}
4

2 に答える 2

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
}
于 2012-11-17T17:35:11.583 に答える
2

チェックボックスを (たとえば a にList) 保存すると、それらをループして、[OK] ボタンが押されたときに選択状態を照会できます。

チェックボックスからを取得するには、およびメソッドStringの使用を選択できます。putClientPropertygetClientPropertyJComponent

于 2012-11-17T17:35:42.947 に答える