繁体   English   中英

Java FX“大量”处理按钮

[英]Java FX “mass” handling Buttons

我已经使用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

假设所有这些按钮都将onButtonClick方法注册为onAction事件处理程序,则可以添加ActionEvent参数并从source属性中检索Button

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM