как мне заполнить мой 2d массив до тех же значений - PullRequest
0 голосов
/ 08 мая 2018

Я хочу, чтобы все кнопки в моей сетке менялись с пустых на X на O, а затем возвращались к пустым при каждом нажатии.в настоящее время он работает только для первого элемента в массиве, так как значения I и j равны 0. Нужен ли мне цикл, аналогичный тому, где я инициализирую кнопки?

Я думал, что два вложенных цикла for былиМне нужно добавить, однако я пробовал это, и это сработало.

Есть предложения?

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Вы используете последние поля i и j, которые используются для установки обработчика событий. Если вы хотите, чтобы все кнопки обрабатывали нажатие одинаково, вам необходимо зарегистрировать обработчик событий для каждой кнопки.

Поскольку вы можете эффективно обращаться только к конечным переменным внутри цикла, вам необходимо сделать окончательную копию переменных цикла или просто объявить локальную переменную для 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);
    }
}
0 голосов
/ 08 мая 2018

Вы можете определить отдельный обработчик событий и назначить его всем вашим кнопкам в цикле

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);
        }        
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...