JavaFX使用for循环将动作分配给数组中的所有按钮
我们有一个热身练习,我们应该创建一个非常简单的游戏,它的UI已经设置好了 我得到错误“我在封闭范围内定义的局部变量必须是final或有效final”。 我不明白,所以我用谷歌搜索了一下,但大多数问题都不同。 键入此问题时,我在stackoverflow建议中发现: 但我就是不明白。我正在从头开始学习编程/java。我希望JavaFX/GuI不是一个障碍 下面的代码仅包括我分配操作的尝试。我暂时将其与按钮的创建分开,以找出问题所在。问题只出现在if和else条件下JavaFX使用for循环将动作分配给数组中的所有按钮,java,arrays,javafx,local-variables,actionevent,Java,Arrays,Javafx,Local Variables,Actionevent,我们有一个热身练习,我们应该创建一个非常简单的游戏,它的UI已经设置好了 我得到错误“我在封闭范围内定义的局部变量必须是final或有效final”。 我不明白,所以我用谷歌搜索了一下,但大多数问题都不同。 键入此问题时,我在stackoverflow建议中发现: 但我就是不明白。我正在从头开始学习编程/java。我希望JavaFX/GuI不是一个障碍 下面的代码仅包括我分配操作的尝试。我暂时将其与按钮的创建分开,以找出问题所在。问题只出现在if和else条件下 for(int i=
for(int i=0; i<=4; i++) {
for(int j=0; j<=4; j++) {
buttonGrid[i][j].setOnAction(new EventHandler<ActionEvent>() {
public void handle(ActionEvent event) {
if (buttonGrid[i][j].getText() == "X") {
buttonGrid[i][j].setText("O");
} else {
buttonGrid[i][j].setText("X");
}
}
});
}
}
for(int i=0;i我认为这个问题的答案很好地解释了您的问题,以及如何解决它您不能在操作处理程序中使用i和j
试试这个。[注意,我还更改了字符串比较*]
for(int i=0; i<=4; i++) {
for(int j=0; j<=4; j++) {
final Button myButton = buttonGrid[i][j];
myButton.setOnAction(new EventHandler<ActionEvent>() {
public void handle(ActionEvent event) {
if ("X".equals(myButton.getText())) {
myButton.setText("O");
} else {
myButton.setText("X");
}
}
});
}
}
用于(int i=0;这是因为变量是在匿名类中复制的,所以必须是最终的。这里更好的解释是:非常感谢!我让它工作了,但我使用了Button,idk what JButton,我保留了字符串比较,因为您出于某种原因给了我一个语法错误,尽管应该没有..编辑:nvm有JUt括号missing@HenryLa不客气。JButton是一个Swing类。或多或少是JavaFx的早期版本。我的错误。如果答案有用,请将其标记为已接受。