Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 操作中的编辑变量侦听器不工作_Java_Swing_Actionlistener - Fatal编程技术网

Java 操作中的编辑变量侦听器不工作

Java 操作中的编辑变量侦听器不工作,java,swing,actionlistener,Java,Swing,Actionlistener,我仍在学习Java,但我已经为此奋斗了很长时间。 我希望能够在按下按钮后编辑布尔值集,但它永远不会工作。 以下是一个例子: JButton send = new JButton(); Boolean click = false send.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) {

我仍在学习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!!")
    }
但是变量没有改变。

如果(单击)条件只计算一次,在任何按钮单击可能发生之前,此时单击为
false
。每次按下按钮后,需要重新评估条件

布尔值的用途是什么?为什么不干脆做:

JButton send = new JButton();

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

算了吧。在Java中,无法实现您想要做的事情。在封闭对象内部(即
新建ActionListener()
),您可以访问 final来自封闭类型的变量,并且只读取它们,但从不更改,因为它们是final

正如下面的示例代码所示(仅此而已):

顺便说一句:这不是一个好主意,你尝试做什么,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;
}

}

您发布的代码没有任何来自何处的上下文。您的操作侦听器定义在哪里?您在哪里检查
单击的状态?您发布它的方式使它看起来像是用同一种方法完成的。当用户单击按钮时,
if
语句已经被处理。@azurefrog这只是代码的一部分,我知道,但我想在单击后编辑变量单击按钮后,您的代码确实会更改变量。只是你用来检查变量是否被设置的代码不能像你希望的那样工作clicked@KeionBeats所以为什么不在
ActionListener
中执行此操作?您似乎在以过程/线性的方式思考,这不是GUI的工作方式,GUI是事件驱动的
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;
}