2

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

4

4 回答 4

5

如果是 Swing,那么您可能希望将希望控制的按钮放入数组或ArrayList<AbstractButton>. 这样,控制按钮的 ActionListener 可以简单地使用 for 循环遍历数组或集合,setEnabled(true)在按钮上调用或 false。考虑将控制按钮设为 JCheckBox 或 JToggleButton。

请注意,如果您使用 JToggleButton,则向其添加 ItemListener。如果这样做,则无需使用布尔值。只需检查传递给 ItemListener 的 itemStateChanged 方法的 ItemEvent 的状态。如果getStateChanged()返回 ItemEvent.SELECTED,则遍历您的 JButton 集合以启用所有按钮。如果它返回 ItemEvent.DESELECTED,则执行相反的操作。

另请注意,按照拜伦霍金斯的评论:

您可能需要考虑ItemListener当按钮以编程方式切换时以及用户切换按钮时将接收事件。唯一会根据ActionListener人类用户的输入触发。我经常遇到错误,因为我选错了。

于 2013-02-14T02:50:02.900 回答
1

如果您的按钮被按下并且不会弹出,那么您很可能在JToggleButton没有调用super它的版本的情况下覆盖了一个方法。而不是覆盖方法,而是创建一个ActionListener并使用addActionListener()来附加到按钮。当您的听众收到按钮操作的通知时,请检查切换按钮是向上还是向下,并setEnabled()相应地检查其他按钮。

于 2013-02-14T02:53:11.343 回答
1

尝试使用这个简单的代码,使用变量作为标志

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");
    }
}
于 2013-02-14T02:53:22.740 回答
1

您需要一个布尔值来表示按钮的状态。

换句话说,当您的按钮关闭时(您的布尔变量为 false),您将从 onClick 侦听器调用方法“turnButtonOn()”或类似的东西。

如果您的布尔变量为真,那么您将调用方法 turnButtonOff()

public void onClick() {
    if(buttonOn){
      turnOff();
    }
    else {
      turnOn();
    }
    buttonOn = !buttonOn;
}
于 2013-02-14T02:56:08.873 回答