ItemStateChanged取消选择JToggleButton时未调用Event

时间:2012-05-02 18:25:57

标签: java swing jtogglebutton itemlistener

我使用ItemListener的itemStateChanged事件在ButtonGroup中有一些JToggleButton来检测何时选择/取消选择按钮。在我单击按钮本身来选择/取消选择它的情况下,它不起作用。我该如何解决这个问题?如果我使用ActionListener,则在调用ActionEvent时,Button的选择状态(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());
      }
    }
    });
}

2 个答案:

答案 0 :(得分:4)

您无法主动取消选择ButtonGroup中的按钮,您必须选择另一个按钮,但是当选择新按钮时,将取消选择前一个按钮,并触发两个事件,一个用于选定事件,一个用于取消选择的项目。

例如:

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();
            }
        });
    }
}

产生

not selected any yet Selected upper button Selected bottom button

答案 1 :(得分:2)

如果您真的想要使用ButtonGroup,那么您已经找到了Custom(ized) ButtonGroup by Darryl Burke