【问题标题】:How to make an on/off button on java?如何在java上制作开/关按钮?
【发布时间】:2013-01-29 19:01:17
【问题描述】:

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

【问题讨论】:

  • 这是一个 Swing GUI 吗?安卓? AWT?网络程序?什么?如果您尝试实现此功能但您的代码不起作用,您可以考虑向我们展示您的代码尝试。
  • 我打赌是 Swing,因为他/她用 JButton 标记了这个问题。
  • 是的,它正在摇摆,抱歉耽搁了,我的互联网很糟糕!我会试试这个!谢谢!!

标签: java swing jbutton


【解决方案1】:

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

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

还请注意 Byron Hawkins 的评论:

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

【讨论】:

  • 也考虑ButtonGroupJToggelButton,见here
  • 您可能需要考虑ItemListener 将在按钮以编程方式 切换时以及用户 切换按钮时接收事件. ActionListener 只会在人类用户的输入时触发。我经常遇到错误,因为我选错了。
  • @ByronHawkins:非常好的观点,谢谢!如果您不介意,我会将其添加到答案中。
  • 谢谢大家!与 ItemListener 它完美地工作......问题解决了!非常感谢!
【解决方案2】:

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

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

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

public void onClick() {
    if(buttonOn){
      turnOff();
    }
    else {
      turnOn();
    }
    buttonOn = !buttonOn;
}

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 如果你只有两个状态,为什么不使用布尔值呢?它会生成代码 if(on){...}else{...}
    • 是的,你可以。这只是我的代码风格。你可以随意修改它:)
    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 2015-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多