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