【问题标题】:Java Boolean and JButtonsJava 布尔值和 JButtons
【发布时间】:2013-05-30 06:49:09
【问题描述】:

我已经编写了这段代码,但由于某种原因,该代码无法按预期工作。看起来它应该可以工作,但它有点让我觉得“isBasic”布尔值的值并没有真正被改变,并且总是导致错误。谁能告诉我怎么了?

    @Override
    public void actionPerformed(ActionEvent e) {
    if (e.getActionCommand().equals("basic")){
        isBasic = true;
    }

    if (isBasic && e.getActionCommand().equals("basic")){
        isBasic = false;
    }

    if (isBasic){
        System.out.println("It works!!");
    }
}

这里是 JButton 的代码:

    JButton basicTower = new JButton("Basic Tower");
    JButton test = new JButton("Test");
    public boolean isBasic = false;

    public TurretPanel(JPanel panel,BorderLayout layout){

    setLayout(layout);
    panel.add(basicTower,BorderLayout.WEST);
    add(panel);


    basicTower.setActionCommand("basic");
    basicTower.addActionListener(this);
}

【问题讨论】:

  • 您是否想找出激活事件的按钮?
  • 尝试如果否则不是如果只是...!!
  • 好吧@A-SM 我想出了那部分,我只是想在按下按钮时打开和关闭它的值。例如,如果值为 true,则保留该值,直到再次按下它,然后将其更改为 false。

标签: java swing boolean jbutton actionlistener


【解决方案1】:

这两个 if 语句相互否定:

if (e.getActionCommand().equals("basic")){
    isBasic = true;
}

if (isBasic && e.getActionCommand().equals("basic")){
    isBasic = false;
}

当命令等于“基本”时,两者都会被执行,第一个将其设置为 true,第二个将其恢复为 false。使用 if/else:

if (e.getActionCommand().equals("basic"))
{
    isBasic = !isBasic;
}

【讨论】:

  • 伙计,你速度很快。我认为我的修复程序完成了它现在应该做的事情。 :)
  • 奇怪的是,查看所有示例,您可以执行isBasic = !isBasic 之类的操作,这可能更具可读性...
【解决方案2】:

你需要使用 else if 而不仅仅是 if。试试这个:

@Override
public void actionPerformed(ActionEvent e) {
    if (e.getActionCommand().equals("basic")){
        isBasic = true;
    }

    else if (isBasic && e.getActionCommand().equals("basic")){
        isBasic = false;
    }

    if (isBasic){
        System.out.println("It works!!");
    }
}

而不是

@Override
public void actionPerformed(ActionEvent e) {
    if (e.getActionCommand().equals("basic")){
        isBasic = true;
    }

    if (isBasic && e.getActionCommand().equals("basic")){
        isBasic = false;
    }

    if (isBasic){
        System.out.println("It works!!");
    }
}

编写方法的更好方法是:

@Override
public void actionPerformed(ActionEvent e) {
    if (e.getActionCommand().equals("basic")){
        isBasic = !isBasic;
    }

    if (isBasic){
        System.out.println("It works!!");
    }
}

【讨论】:

  • 正要发布完全相同的东西;)
  • 如果e.getActionCommand().equals("basic")true,则永远不会执行第二条语句(else if
  • 这有点工作。我添加了一行来测试它是否可能是假的,它只说按钮是真的。出于某种原因,它不想将其切换为 false
  • @user2449865 您需要先检查isBasic && e.getActionCommand().equals("basic"),然后再检查e.getActionCommand().equals("basic")if-else 语句的顺序错误
  • 奇怪的是,看看所有的例子,你可以做类似isBasic = !isBasic
【解决方案3】:

我认为您遇到了问题,因为您应该使用 if-else 语句...

考虑一下...假设e.getActionCommand() 设置为"basic"

if (e.getActionCommand().equals("basic")){
    isBasic = true;
}

// isBasic is not true...

// This will now equate to true as well...
if (isBasic && e.getActionCommand().equals("basic")){
    isBasic = false;
}

// Meaning isBasic will ALWAYS be false (so long as e.getActionCommand()
// is "basic"
if (isBasic){
    System.out.println("It works!!");
}

尝试使用类似...的东西

if (isBasic && e.getActionCommand().equals("basic")){
    isBasic = false;
} else if (e.getActionCommand().equals("basic")){
    isBasic = true;
}

相反。

您可能需要更改订单以满足您的要求,但对我来说,这更有意义...

使用JToggleButton 可能更容易

更新

这样做实际上可能更简单......

if (isBasic && e.getActionCommand().equals("basic")){
    isBasic = !isBasic;
}

【讨论】:

  • 谢谢@MadProgrammer!!效果很好,你有一个很好的解释!
猜你喜欢
  • 2011-04-13
  • 2010-11-20
  • 2021-09-28
  • 1970-01-01
  • 1970-01-01
  • 2011-01-29
  • 1970-01-01
  • 2015-10-26
  • 2016-01-30
相关资源
最近更新 更多