0

我已经编写了这段代码,但由于某种原因,该代码无法按预期工作。看起来它应该可以工作,但它有点让我觉得“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);
}
4

3 回答 3

3

您需要使用 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!!");
    }
}
于 2013-06-04T01:13:04.063 回答
3

这两个 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;
}
于 2013-06-04T01:13:24.597 回答
2

我认为您遇到问题是因为您应该使用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;
}
于 2013-06-04T01:13:41.790 回答