我刚刚创建了我的第一个javaFX程序。它包含55个按钮,我试图找到一种方法来获取按下的按钮的id并将其保存到varible而不为每个按钮创建一个处理程序。
编辑我设法用8个GridPane填充了160个按钮,每个按钮都给我回复了名字。我添加了解决方案以防有人感兴趣。
感谢詹姆斯的时间和帮助!
for(int i = 1; i < 9; i++ ) {
for (int j = 0; j < 5; j++) {
for (int k = 0; k < 4; k++) {
String buttonText = "" + buttoncounter;
Button button = new Button(buttonText);
switch(i){
case 1: gp1.add(button, k, j);
break;
case 2: gp2.add(button, k, j);
break;
case 3: gp3.add(button, k, j);
break;
case 4: gp4.add(button, k, j);
break;
case 5: gp5.add(button, k, j);
break;
case 6: gp6.add(button, k, j);
break;
case 7: gp7.add(button, k, j);
break;
case 8: gp8.add(button, k, j);
}
button.setMaxSize(Double.MAX_VALUE, Double.MAX_VALUE);
button.setOnAction(e -> {
buttonPressed = Integer.parseInt(buttonText);
});
buttoncounter++;
}
}
}
答案 0 :(得分:0)
您应该以编程方式创建按钮(即不在FXML中)。这样你就可以轻松地为每个处理器注册一个不同的处理程序,而你不需要通过id或其文本等来查找按钮。
例如,在您的FXML文件中,执行
<TilePane fx:id="buttonPane" />
然后在控制器中:
public class Controller {
@FXML
private TilePane buttonPane ;
public void initialize() {
for (int i = 1 ; i <= 55 ; i++) {
String buttonText = "Button "+i ;
Button button = new Button(buttonText);
buttonPane.getChildren().add(button);
button.setOnAction(e -> {
// whatever you need here: you know the button pressed is the
// one and only button the handler is registered with
System.out.println(buttonText + " clicked");
});
}
}
// ...
}