1

ButtonGroupにいくつかのJToggleButtonがあり、ItemListenerのitemStateChangedイベントを使用して、ボタンが選択されているか選択されていないかを検出しています。ボタン自体をクリックして選択/選択解除した場合は動作しません。この問題を解決するにはどうすればよいですか?ActionListenerを使用する場合、ActionEventが呼び出されると、ボタンの選択状態(isSelected())は常にtrueになります。

ButtonGroup buttonGroup = new ButtonGroup();
for(int i=0;i<toggleButtons.length;i++){
    buttonGroup.add(toggleButtons[i]);
}
for(int i=0;i<toggleButtons.length;i++){
    final int  j=i;
    toggleButtons[i].addItemListener(new ItemListener(){
    public void itemStateChanged(ItemEvent e) {
         JToggleButton item=(JToggleButton)e.getSource();
      if(e.getStateChange()==ItemEvent.SELECTED){
          System.err.println(j+" selected!!!! "+item.getText());
      } else if(e.getStateChange()==ItemEvent.DESELECTED){
          System.err.println(j+" unselected!!!! "+item.getText());
      }
    }
    });
}
4

2 に答える 2

4

内のボタンをアクティブに選択解除することはできませんButtonGroup。別のボタンを選択する必要がありますが、新しいボタンを選択すると、前のボタンが選択解除され、選択されたアイテムと選択解除されたアイテムの2つのイベントがトリガーされます。

例えば:

public class FrameTest extends JFrame {

    public FrameTest init() {
        ItemListener listener = new ItemListener() {
            @Override
            public void itemStateChanged(ItemEvent e) {
                ((JToggleButton)e.getSource()).setText("" + e.getStateChange());
            }
        };
        setLayout(new GridLayout(2,1));
        ButtonGroup bg = new ButtonGroup();
        // button 1
        JToggleButton jtb = new JToggleButton("Button");
        jtb.addItemListener(listener);
        bg.add(jtb);
        add(jtb);
        // button 2
        jtb = new JToggleButton("Button");
        jtb.addItemListener(listener);
        bg.add(jtb);
        add(jtb);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
        pack();
        return this;
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new FrameTest().init();
            }
        });
    }
}

生成:

まだ選択されていません 選択した上部ボタン 選択した下のボタン

于 2012-05-02T18:44:13.957 に答える
2

本当にButtonGroupを使用したい場合は、Darryl Burke による Custom(ized) ButtonGroupを探してください。

于 2012-05-02T20:14:27.607 に答える