我还在学习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!!")
}
但变量不会改变。
答案 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;
}
}