Java FX "массовая" обработка кнопок - PullRequest
0 голосов
/ 02 мая 2018

Я запустил проект TicTacToe в Java FX, используя SceneBuilder. FXML состоит из кнопок 3х3 внутри GridPane.

То, что я хотел бы сделать, - это создать «универсальный» метод, чтобы при нажатии одной из кнопок текст изменялся на «O» или «X», при условии, что он еще не был назначен один.

Как то так

private void onButtonClick(){
    if (btn00.getText() == null)
        btn00.setText("X or O");
}

, где btn00 - это не конкретное имя кнопки, а то, которое выбрано, так как someTableView.getSelectionModel() ... работает для TableView с.

Ответы [ 2 ]

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

Помимо решения, использующего event.getSource(), вы также можете просто создать метод, который присоединяет обработчик к кнопке:

private Button[][] buttons = new Button[3][3] ;
private String currentTurn = "O" ;

// ...

for (int x = 0 ; x < 3 ; x++) {
    for (int y = 0 ; y < 3 ; y++) {
        buttons[x][y]=new Button();
        attachHandler(buttons[x][y]);
    }
}

// ...


private void attachHandler(Button button) {
    button.setOnAction(event -> {
        if (button.getText()==null || button.getText().isEmpty()) {
            button.setText(currentTurn);
        }
    });
}
0 голосов
/ 02 мая 2018

Если все эти кнопки имеют метод onButtonClick, зарегистрированный как обработчик событий onAction, вы можете добавить параметр ActionEvent и извлечь Button из свойства source.

private void onButtonClick(ActionEvent event) {
    Button button = (Button) event.getSource();
    if (button.getText() == null || button.getText().isEmpty()) {
        button.setText("X or O");
    }
}
...