在动作侦听器中编辑变量不起作用

时间:2017-05-11 22:15:29

标签: java swing actionlistener

我还在学习Java,但很长一段时间我一直在努力学习。

我希望能够在按下按钮后编辑设置布尔值,但它永远不会起作用。

以下是一个例子:

    JButton send = new JButton();
    Boolean click = false

    send.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                click = true
            }
        });
    if (click){
            System.out.println("WORKS GOOD!!")
    }

但变量不会改变。

2 个答案:

答案 0 :(得分:1)

false条件仅在任何按钮点击发生之前评估一次,并且当时点击为JButton send = new JButton(); send.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { System.out.println("WORKS GOOD!!"); } }); 。每次按下按钮后,您需要重新评估条件。

布尔值的目的是什么?为什么不这样做:

{{1}}

答案 1 :(得分:0)

忘了它。在Java中,没有办法制作你想做的事情。您可以访问的封闭对象(即new ActionListener())内 来自封闭类型的最终变量,只读取它们,但从不更改,因为它们是最终

如下面的示例代码有效(但仅此而已):

    final Boolean click = false;    

    send.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                System.out.println("outside variable 'click' is:" + click);
            }
        });
BTW:你尝试做什么并且Java不允许它并不是一个好主意,因为它不是一个好主意......: - )

更新:如果您仍想这样做,可以创建一个包装类。

下面的代码可以使用,但是后面不要说,我没有警告你这是一个非常糟糕的主意。

public class MyClass {

public static void main(String[] args) {
    JButton send = new JButton();
    final BooleanWrapper click = new BooleanWrapper();

    click.value = false;

    send.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                click.value = true;
            }
        });

    send.getActionListeners()[0].actionPerformed(new ActionEvent(new MyClass(), 1, "very bad idea"));

    if (click.value ){
            System.out.println("WORKS GOOD!!");
    }

}

private static class BooleanWrapper
{
    private Boolean value;
}

}