如何在java上制作开/关按钮?

如何在java上制作开/关按钮?,java,swing,jbutton,Java,Swing,Jbutton,我需要一个按钮,当按下时,启用所有其他按钮,并将标签名称从“关闭”更改为“打开”,当再次按下时,禁用所有按钮并再次将开关转到“关闭”,就像打开/关闭开关一样。问题是,我可以“打开它”,但无法将其关闭。如果是Swing,那么您可能希望将要控制的按钮放置到数组或数组列表中。这样,控制按钮的ActionListener就可以简单地使用for循环遍历数组或集合,在按钮上调用setEnabled(true)或false。考虑将控制按钮设为JCytBox或JToGGLeButo. 注意,如果使用JToggl

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

如果是Swing,那么您可能希望将要控制的按钮放置到数组或
数组列表中。这样,控制按钮的ActionListener就可以简单地使用for循环遍历数组或集合,在按钮上调用
setEnabled(true)
或false。考虑将控制按钮设为JCytBox或JToGGLeButo.

注意,如果使用JToggleButton,则向其添加ItemListener。如果你这样做,就没有必要使用布尔。只需检查传递到ItemListener的itemStateChanged方法中的ItemEvent的状态。如果
getStateChanged()
返回ItemEvent.SELECTED,则迭代JButton集合以启用所有按钮。如果返回ItemEvent.DESELECTED,则执行相反的操作

另请注意拜伦·霍金斯的评论:


您可能会想,当代码以编程方式切换时,当用户切换按钮时, ItEistListNave/Cuth>将接收事件。

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()”或类似的性质

如果布尔变量为true,则将调用一个方法turnButtonOff()


这是一个Swing GUI吗?安卓AWT?网络程序?什么?如果你试图实现这一点,而你的代码不起作用,你可以考虑向我们展示你的代码尝试。我打赌它是Swing,因为他/她用< JButton > <代码>来标记这个问题。是的,它是Swing,抱歉耽搁了,我的互联网很烂!我试试这个!谢谢如果只有两个状态,为什么不使用布尔值呢?如果(on){…}或者{…}是的,您可以,它将生成代码。这就是我的代码风格。你可以任意修改它:(也可以考虑<代码> ButoGoopy<代码> <代码> JToggelButton <代码>,看到。你可能想考虑<代码> ITMistListabue/Cuth>在编程切换按钮时也会收到事件,当用户切换按钮时也会收到事件。
ActionListener
仅在用户输入时启动。我经常有虫子,因为我选错了。@ByronHawkins:一个很好的观点,谢谢!如果你不介意的话,我会在答案中加上这个。谢谢大家!使用ItemListener,它工作得非常完美。。。问题解决了!非常感谢你!
public void onClick() {
    if(buttonOn){
      turnOff();
    }
    else {
      turnOn();
    }
    buttonOn = !buttonOn;
}