我已经使用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。
答案 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);
}
});
}