在动作侦听器中编辑变量不起作用
Edit variable in action listener not working
我还在学习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!!")
}
但是变量没有改变。
if (click)
条件仅被评估一次,在任何按钮点击发生之前,当时点击是 false
。每次按下按钮后,您都需要重新评估条件。
布尔值的用途是什么?为什么不这样做:
JButton send = new JButton();
send.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
System.out.println("WORKS GOOD!!");
}
});
算了。在Java中没有办法做出你想做的事。在封闭对象内(即 new ActionListener()
),您可以访问
final 来自封闭类型的变量,并且只读取它们,但永远不会改变,因为它们是 final.
下面的示例代码有效(但仅此而已):
final Boolean click = false;
send.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
System.out.println("outside variable 'click' is:" + click);
}
});
顺便说一句:您尝试做的事情不是一个好主意并且 Java 不允许这样做,因为这不是一个好主意...:-)
更新:如果你仍然想这样做,你可以制作一个包装器 class。
下面的代码有效,但以后不要告诉我,我没有警告你这是一个非常糟糕的主意。
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;
}
}
我还在学习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!!")
}
但是变量没有改变。
if (click)
条件仅被评估一次,在任何按钮点击发生之前,当时点击是 false
。每次按下按钮后,您都需要重新评估条件。
布尔值的用途是什么?为什么不这样做:
JButton send = new JButton();
send.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
System.out.println("WORKS GOOD!!");
}
});
算了。在Java中没有办法做出你想做的事。在封闭对象内(即 new ActionListener()
),您可以访问
final 来自封闭类型的变量,并且只读取它们,但永远不会改变,因为它们是 final.
下面的示例代码有效(但仅此而已):
final Boolean click = false;
send.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
System.out.println("outside variable 'click' is:" + click);
}
});
顺便说一句:您尝试做的事情不是一个好主意并且 Java 不允许这样做,因为这不是一个好主意...:-)
更新:如果你仍然想这样做,你可以制作一个包装器 class。
下面的代码有效,但以后不要告诉我,我没有警告你这是一个非常糟糕的主意。
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;
}
}