我需要一个按钮,当按下时,启用所有其他按钮,并将标签的名称从“关”更改为“开”,再次按下时,禁用所有按钮并将开关再次切换回“关” ,就像一个开/关开关。问题是,我可以“打开”它,但不能将其关闭。
4 回答
如果是 Swing,那么您可能希望将希望控制的按钮放入数组或ArrayList<AbstractButton>
. 这样,控制按钮的 ActionListener 可以简单地使用 for 循环遍历数组或集合,setEnabled(true)
在按钮上调用或 false。考虑将控制按钮设为 JCheckBox 或 JToggleButton。
请注意,如果您使用 JToggleButton,则向其添加 ItemListener。如果这样做,则无需使用布尔值。只需检查传递给 ItemListener 的 itemStateChanged 方法的 ItemEvent 的状态。如果getStateChanged()
返回 ItemEvent.SELECTED,则遍历您的 JButton 集合以启用所有按钮。如果它返回 ItemEvent.DESELECTED,则执行相反的操作。
另请注意,按照拜伦霍金斯的评论:
您可能需要考虑
ItemListener
当按钮以编程方式切换时以及用户切换按钮时将接收事件。唯一会根据ActionListener
人类用户的输入触发。我经常遇到错误,因为我选错了。
如果您的按钮被按下并且不会弹出,那么您很可能在JToggleButton
没有调用super
它的版本的情况下覆盖了一个方法。而不是覆盖方法,而是创建一个ActionListener
并使用addActionListener()
来附加到按钮。当您的听众收到按钮操作的通知时,请检查切换按钮是向上还是向下,并setEnabled()
相应地检查其他按钮。
尝试使用这个简单的代码,使用变量作为标志
public int status = 0; //0 = on, 1=off
public void button_clicked()
{
//on button clicked
if(status == 0)
{
//logic here
status = 1;
buttonname.setText("Off");
}
//off button clicked
else if(status == 1)
{
//logic here
status = 0;
buttonname.setText("On");
}
}
您需要一个布尔值来表示按钮的状态。
换句话说,当您的按钮关闭时(您的布尔变量为 false),您将从 onClick 侦听器调用方法“turnButtonOn()”或类似的东西。
如果您的布尔变量为真,那么您将调用方法 turnButtonOff()
public void onClick() {
if(buttonOn){
turnOff();
}
else {
turnOn();
}
buttonOn = !buttonOn;
}