Java 操作中的编辑变量侦听器不工作
我仍在学习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) {
我希望能够在按下按钮后编辑布尔值集,但它永远不会工作。
以下是一个例子:
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;
}