从按钮获取名称/ ID

时间:2017-09-19 19:33:50

标签: java javafx

我刚刚创建了我的第一个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++;
            }
        }
    }

1 个答案:

答案 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");
            });
        }
    }

    // ...
}