0

嗨,我想知道如何在按钮的 mouseclicked 事件中响应不同的情况。我目前有类似的东西

boolean x = false;
btnExample.addMouseListener(new MouseAdapter() {

    public void mouseClicked(MouseEvent arg0) {
    .
    .
    .

我希望 mouseclicked 中的第一行是一个 if 语句,用于检查布尔值 (x) 是否为真/假。我想我的问题是如何访问这个变量 (x),因为它必须被标记为 final(这不是我想要的,因为我需要更改它)?我将在某个时候将 x 更改为 true。

4

2 回答 2

2
  1. 您正在尝试在匿名内部类中使用本地布尔变量,这仅在字段为 final 时才有效,以防止内部类的变量副本不同步。解决方案是使布尔值成为类字段,它将在匿名内部类中可见。
  2. 将 MouseListeners 与 JButtons 一起使用并不是一个好主意。请改用 ActionListener。否则,您的按钮将不会始终按预期运行。例如,禁用按钮不会像应有的那样停用侦听器。

例如,

public class Foo {
  private boolean myBooleanClassField = false;


}
于 2013-10-15T19:47:25.923 回答
2

1)使该字段成为匿名类的类字段。

btnExample.addMouseListener(new MouseAdapter() {
    private boolean x = false;

    @Override
    public void mouseClicked(MouseEvent arg0) {
       //code here
    }
}

2)或者创建一个私有内部类

private class MyMouseListener extends MouseAdapter {
    private boolean x = false;

     //or you can inject via constructor or setter

    @Override
    public void mouseClicked(MouseEvent arg0) {
       //code here
    }
}

3)或x从您的类中创建一个实例变量,但仅在类中使用或变异时才建议这样x做,而不仅仅是在匿名类中。

例子 :

public class MyClass {

private boolean x = false;

 public MyClass(){

  btnExample.addMouseListener(new MouseAdapter() {

    @Override
    public void mouseClicked(MouseEvent arg0) {
       x = true;
    }
  }
 }        
}
于 2013-10-15T19:49:10.043 回答