我使用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());
}
}
});
}
答案 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();
}
});
}
}
产生
答案 1 :(得分:2)
如果您真的想要使用ButtonGroup,那么您已经找到了Custom(ized) ButtonGroup by Darryl Burke