Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.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
JavaFX,变量在actionEvent上不更新_Java_Javafx - Fatal编程技术网

JavaFX,变量在actionEvent上不更新

JavaFX,变量在actionEvent上不更新,java,javafx,Java,Javafx,我有一个问题,我有一个按钮,点击时我想更新一个值,但我不能更新它,因为lambda表达式需要是最终的。在本例中,我希望将更改编号添加到当前编号并保存它,这样就有一个新的当前编号,每次我单击按钮时,它都会接受该编号并添加更改。我怎样才能避开这个问题 这是一个类,我想在选择带有箭头的按钮之一时,通过“int change”增加或减少值。现在,当您单击按钮时,它会获取当前值并通过“更改”将其增加,但不会更新它?我怎样才能解决这个问题 还有,当我尝试了所有方法但都不起作用时,如何向imageView添加

我有一个问题,我有一个按钮,点击时我想更新一个值,但我不能更新它,因为lambda表达式需要是最终的。在本例中,我希望将更改编号添加到当前编号并保存它,这样就有一个新的当前编号,每次我单击按钮时,它都会接受该编号并添加更改。我怎样才能避开这个问题

这是一个类,我想在选择带有箭头的按钮之一时,通过“int change”增加或减少值。现在,当您单击按钮时,它会获取当前值并通过“更改”将其增加,但不会更新它?我怎样才能解决这个问题

还有,当我尝试了所有方法但都不起作用时,如何向imageView添加填充或边距?或者我可以向边框窗格的特定部分添加填充

我将试着用一个例子来解释它 如果您不理解我的解释,请阅读本教程(这里的解释非常好):

如果可以将变量设置为final,则只能从lambda中访问该变量:

int i = 5; // You could set this variable to final and it would still compile
    
runSomething(() -> {
    System.out.println(i); // Will compile since i could be set final
});
这就是当你再次改变我时会发生的事情:

int i = 5; // i was defined
// ...
i = 10; // assigned new value to i therefore i could no longer be final

runSomething(() -> {
    System.out.println(i); // Will NOT compile since i could not be final anymore after it got changed
});
在Java1.8+之前,我们必须声明变量final,以便在实现这样的接口(/lambda(仅自1.8以来存在))时使用它们


因此,要从lamda内部的外部(除非是类的字段)访问变量,您需要能够使其成为最终变量。您永远无法更改这样的值(就像您尝试的那样),因为您无法更改最终变量。您的“当前”变量在lambda中是“final”,即使您从未将其设置为final(这是因为包含该变量的方法可能在从其他地方调用lamda之前已经完成了其执行。由于您无法更改过去,因此该变量在lamda体中是不可更改的)



顺便说一句,您的“defLabel”在lambda的主体中也是“final”的,因为它从未被更改过(这也是为什么您可以在lamda内部访问它)

您不能从labda内部更改方法范围中的变量。在按下按钮之前,您创建labda的方法已经通过。如果您为我们提供更多代码,我们可以制定解决方案,请使用文本形式,而不是图像。我添加了代码和更多信息,请告知是否可以添加任何其他内容。只需将其作为实例变量(或将其包装在对象中)。或者使用
IntegerProperty
并将标签文本绑定到它。
int i = 5; // i was defined
// ...
i = 10; // assigned new value to i therefore i could no longer be final

runSomething(() -> {
    System.out.println(i); // Will NOT compile since i could not be final anymore after it got changed
});