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

i86rm4rw  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(274)

我们有一个热身练习,我们应该创建一个真正简单的游戏,它的用户界面已经设置好了

.
我得到了错误“我在封闭范围内定义的局部变量必须是final或实际上是final”。
我不明白,所以我在谷歌上搜索了一下,但大多数问题都不一样。键入此问题时,我在stackoverflow建议中发现:
在javafx的按钮数组中为每个按钮分配一个操作
但我就是不明白。我正在从头开始学习编程/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");
                    }
                }
            });
         }
    }

现在我只希望按钮的标签在你点击它们时从x变为o,从o变为x。顺便说一句,如果我学习javafx和gui,是否意味着我必须学习css(不是我不想,只是。。不是现在)
如果需要代码的其余部分来解决问题:http://textuploader.com/5b1kh
如果有人能告诉我如何更有效地拍摄这些场景,我也会很感激的(顺便说一句,我可以锁定网格窗格中所有单元格边的纵横比吗?)

chy5wohz

chy5wohz1#

我认为这个问题的答案很好地解释了你的问题,以及如何用局部变量范围来解决这个问题。如何解决?不能在操作处理程序中使用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");
                }
            }
        });
    }
}

[*]如何比较java中的字符串?

相关问题