Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.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使用for循环将动作分配给数组中的所有按钮_Java_Arrays_Javafx_Local Variables_Actionevent - Fatal编程技术网

JavaFX使用for循环将动作分配给数组中的所有按钮

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=

我们有一个热身练习,我们应该创建一个非常简单的游戏,它的UI已经设置好了

我得到错误“我在封闭范围内定义的局部变量必须是final或有效final”。

我不明白,所以我用谷歌搜索了一下,但大多数问题都不同。 键入此问题时,我在stackoverflow建议中发现:

但我就是不明白。我正在从头开始学习编程/java。我希望JavaFX/GuI不是一个障碍

下面的代码仅包括我分配操作的尝试。我暂时将其与按钮的创建分开,以找出问题所在。问题只出现在if和else条件下

    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的早期版本。我的错误。如果答案有用,请将其标记为已接受。