Java 检查JToggleButton是否按下并禁用
我有一个JTogglebuttons数组和一个JButton,当按下JButton时,它会启动一个循环,循环遍历所有JTogglebuttons以查看它是否被按下,如果被按下,它应该使它禁用/不可点击 下面是一段代码,这是一个问题Java 检查JToggleButton是否按下并禁用,java,swing,jtogglebutton,Java,Swing,Jtogglebutton,我有一个JTogglebuttons数组和一个JButton,当按下JButton时,它会启动一个循环,循环遍历所有JTogglebuttons以查看它是否被按下,如果被按下,它应该使它禁用/不可点击 下面是一段代码,这是一个问题 Public void actionPerformed(ActionEvent e){ Object pressed = e.getSource(); if (pressed == btnPurchase) {
Public void actionPerformed(ActionEvent e){
Object pressed = e.getSource();
if (pressed == btnPurchase) {
for(int row = 0; row<8 ; row++){
for(int column = 0; column < 4; column++) {
if (seat[row][column].isPressed()) {
seat[row][column].setEnabled(false);
}
}
}
}
如果我使用。我会选择
import javax.swing.ButtonModel;
import javax.swing.JFrame;
import javax.swing.JToggleButton;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class JToggleButtonChangeListener {
public static void main(String args[]) {
JFrame frame = new JFrame("Selecting Toggle");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JToggleButton toggleButton = new JToggleButton("Selecting Toggle / Deselacting Toggle");
toggleButton.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
ButtonModel buttonModel = toggleButton.getModel();
boolean armed = buttonModel.isArmed();
boolean pressed = buttonModel.isPressed();
boolean selected = buttonModel.isSelected();
System.out.println("Changed: " + armed + "/" + pressed + "/" + selected);
}
});
frame.add(toggleButton);
frame.pack();
frame.setLocation(150, 150);
frame.setVisible(true);
}
}
我明白了
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at cinemaManager.actionPerformed(cinemaManager.java:174)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2028)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2351)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6375)
查找ButtonModel,它返回预期的方法,包括isSelected
import javax.swing.ButtonModel;
import javax.swing.JFrame;
import javax.swing.JToggleButton;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class JToggleButtonChangeListener {
public static void main(String args[]) {
JFrame frame = new JFrame("Selecting Toggle");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JToggleButton toggleButton = new JToggleButton("Selecting Toggle / Deselacting Toggle");
toggleButton.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
ButtonModel buttonModel = toggleButton.getModel();
boolean armed = buttonModel.isArmed();
boolean pressed = buttonModel.isPressed();
boolean selected = buttonModel.isSelected();
System.out.println("Changed: " + armed + "/" + pressed + "/" + selected);
}
});
frame.add(toggleButton);
frame.pack();
frame.setLocation(150, 150);
frame.setVisible(true);
}
}
注意:背景的更改不适用于所有的外观和感觉我发现我在错误的位置重新定义了数组,从而丢失了现有元素。现在修复了,谢谢在文档中查找名称中带有“selected”的方法。例如,不需要进入按钮模型。看,你什么意思?我如何使用它?我试过了。我选择它编译,但什么也没发生。@Henry Hoggard请看我的编辑,你必须接受JToggleButton更接近JCheckBox/JRadioButton的抱怨JButton@user1329572我看到了,但我喜欢纽扣模型,包括覆盖所有JButtonComponents inc JMenuItem的自定义模型的一部分…@Henry Hoggard您是否尝试了我在这里发布的代码,我可以看到那里的ActionListener,与ButtonModel无关,ItemListener再次JToggleButton是关于JCheckBox/JRadioButton而不是JButton,请查看Swing教程