如何将我的二维数组填充到相同的值

时间:2018-05-08 11:18:34

标签: java javafx

我希望网格上的所有按钮从空白更改为X到O,然后每次单击时返回空白。它目前只适用于数组中的第一个元素,因为I和j的值都是0.我是否需要一个类似于初始化按钮的循环?

我虽然我需要添加两个嵌套的for循环,但是我已经尝试了这个并且它已经有用了。

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

您使用最终字段ij用于设置事件处理程序。如果您希望使用所有按钮处理单击相同的方式,则需要将事件处理程序注册到每个按钮。

由于你只能有效地访问循环内的最终变量,你需要制作循环变量的最终副本,或者只是为Button声明一个局部变量。

final List<String> values = Arrays.asList("", "X", "O");

for(int i=0; i<btn.length; i++){
    for(int j=0; j<btn.length;j++){
        final Button button = new Button("");

        button.setOnAction(event -> {
            int valueIndex = values.indexOf(button.getText());
            button.setText(values.get((valueIndex+1) % values.size()));
        });
        // Initializing 2D buttons with values i,j
        btn[i][j] = button;                      
        button.setPrefSize(35, 40);
        gridPane.add(button, i, j);
        // button.setDisable(false);
    }
}

答案 1 :(得分:0)

您可以定义单个事件处理程序并将其分配给循环中的所有按钮

EventHandler<ActionEvent> eventHandler = new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent event) {
                 Button button = (Button) event.getSource();

                 switch (button.getText()) {
                    case "":
                      button.setText("X");
                      break;
                    case "X":
                      button.setText("O");
                      break;
                    default:
                      button.setText("");
                      break;
                }
            }
        };

//Two FOR loops used for creating 2D array of buttons with values    i,j
for(int i=0; i<btn.length; i++){
        for(int j=0; j<btn.length;j++){

           // Initializing 2D buttons with values i,j
           btn[i][j] = new Button();                      
           btn[i][j].setPrefSize(35, 40);
           gridPane.add(btn[i][j], i, j);
           btn[i][j].setText("");
           btn[i][j].setDisable(false);

           btn[i][j].setOnAction(eventHandler);
        }        
}