如何在java上创建一个开/关按钮?

时间:2013-02-14 02:45:59

标签: java swing jbutton

我需要一个按钮,当按下该按钮时,启用所有其他按钮,并将标签名称从“关闭”更改为“开启”,再次按下时,禁用所有按钮并将开关切换为“关闭” “再次回来,就像一个开/关开关。问题是,我可以“打开它”,但我无法将其关闭。

4 个答案:

答案 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");
    }
}