使用循环生成的按钮交换场景。(JavaFX)

时间:2018-05-08 15:13:27

标签: java javafx

我正在使用以下代码生成Buttons

public static void addSitesButton() {

        Button buttons[] = new Button[CsvScanner.numberOfLines + 1];

        for (int i = 0; i < CsvScanner.numberOfLines && i< 19; i++) {
            buttons[i] = new Button();
            addPages(i, buttons[i]);
        }
    }

addPages()方法

button.setOnAction(e -> {
        button.setTextFill(Color.CRIMSON);
         buttonClicked = (((Button) e.getSource()).getText());
    });

我只得到我创建的按钮的编号。

使用该代码生成所需的SceneGrid

public static void createGrids() {

    GridPane gridArray[] = new GridPane[buttonCounter];
    Scene sceneArray[] = new Scene[buttonCounter];
    for (int i = 0; i < buttonCounter; i++) {
        gridArray[i] = new GridPane();
        sceneArray[i] = new Scene(gridArray[i]);
    }
}

我需要使用创建的Scene更改Buttons。 例如:First Button必须更改为数组中的第一个Scene。 我根本不知道如何做到这一点。

3 个答案:

答案 0 :(得分:0)

如果buttonClicked给出一个int值,你可以这样做。

button.setOnAction(e -> {
    button.setTextFill(Color.CRIMSON);
    int buttonClicked = Integer.parse((((Button) e.getSource()).getText()));
    stage.setScene(sceneArray[buttonClicked]);
});

答案 1 :(得分:0)

如果您的按钮文本不包含int值,则可以将其数组索引记录为AccessibleText

for (int i = 0; i < CsvScanner.numberOfLines && i< 19; i++) {
       buttons[i] = new Button();
       buttons[i].setAccessibleText(i+"");
       addPages(i, buttons[i]);
}

然后

button.setOnAction(e -> {
    button.setTextFill(Color.CRIMSON);
    int buttonClicked = Integer.parse((((Button) e.getSource()).getAccessibleText()));
    stage.setScene(sceneArray[buttonClicked]);
});

答案 2 :(得分:0)

创建按钮时,您可以在userData中记录与按钮相关的值,并在您引用按钮时访问该保存的值。

例如,在创建按钮时记录用户数据:

buttons[i] = new Button();
buttons[i].setUserData(i);

然后,当您需要访问它时,检索您已保存的用户数据:

button.setOnAction(e -> {
    int buttonIndex = (int) button.getUserData();
    // do whatever you need to with button index...
});

如果您需要将多个数据与给定节点相关联,那么您可以使用node.getProperties() API,但是,对于您的问题,可能只需要使用节点userData属性

  

我需要使用创建的按钮更改场景。例如:First Button必须更改为数组中的第一个Scene。我根本不知道如何做到这一点。

假设您已经为按钮初始化了场景数组和用户数据,那么您应该能够:

button.setOnAction(e -> {
    int index = (int) button.getUserData();
    stage.setScene(sceneArray[index]);
});