Java FX“质量”处理按钮

时间:2018-05-01 21:21:07

标签: java javafx scenebuilder

我已经使用SceneBuilder在Java FX中启动了一个TicTacToe项目。 FXML仅包含GridPane内的3x3按钮网格。

我想做的是制作一个“通用”方法,以便当按下其中一个按钮时,它会将其文本更改为“O”或“X”,并且尚未将其分配给任何一个按钮。之一。

像这样的东西

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

其中btn00不是按钮的具体名称,而是someTableView.getSelectionModel() ...选择的按钮适用于TableView s。

2 个答案:

答案 0 :(得分:1)

假设所有这些按钮都将@Entity @Table(name = "person") public class Person { //... @Enumerated(STRING) @ElementCollection @CollectionTable(name = "person_languages", joinColumns = @JoinColumn(name = "person_id"), foreignKey = @ForeignKey(name = "fk_person_languages_person")) @Column(name = "language", length = 2, nullable = false) private List<Language> languages; } 方法注册为onButtonClick事件处理程序,您可以添加onAction参数并从ActionEvent中检索Button } property。

source

答案 1 :(得分:1)

除了使用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);
        }
    });
}