JavaFX:如何创建两列按钮?

时间:2016-04-12 17:42:24

标签: java javafx

我正在尝试创建一个电梯按钮垫模拟器,按钮标记为1-10,有5行和2列。以下是我要解释的一个例子:

9        10
7         8
5         6
3         4
1         2

目前,我的代码有10个按钮,但都被合并到一个我不想要的列中。看起来像这样:

1
1
2
2
3
3
4
4
5
5

这里只是我的代码片段:(不要介意评论的部分)

 @Override
public void start(Stage primaryStage) {
    // Get the pane for the scene
    primaryStage.setScene(new Scene(getPane(), 180, 600));

    // Setup the stage
    primaryStage.setTitle("Elevator Buttons");
    primaryStage.setResizable(false);
    primaryStage.show();
}

protected Pane getPane() {
    Pane pane = new VBox(10);
    pane.setPadding(new Insets(40));
   GridPane grid = new GridPane();
    //for (int i = row - 1; i >= 0; i-=2) {
       // for (int k = col - 1; k >= 0; i-=1) {

    for (int i = 0; i < row; i++) {
        for(int k =0; k <col; k++) {
            // Set the button number as text for the button
            buttonsArray[i][k] = new Button(Integer.toString(i + 1));

            // Set preferred width and style with a light gray background
            buttonsArray[i][k].setPrefWidth(100);
            buttonsArray[i][k].setStyle("-fx-font: 22 arial; -fx-base: LightGray");

            // Add the button to the pane and set the handler
            pane.getChildren().add(buttonsArray[i][k]);
            buttonsArray[i][k].setOnAction(ButtonHandler);
        }
    }
    return pane;
}

那么如何用数组制作两列按钮呢?

2 个答案:

答案 0 :(得分:2)

正如评论和其他答案中所指出的,您可以使用GridPane来实现您想要达到的目标。此代码应该完成这项工作,包括正确标记电梯按钮:

@Override
    public void start(Stage primaryStage) {
        // Get the pane for the scene
        primaryStage.setScene(new Scene(getPane(), 180, 600));

        // Setup the stage
        primaryStage.setTitle("Elevator Buttons");
        primaryStage.setResizable(false);
        primaryStage.show();
    }

    protected Pane getPane() {
        Pane pane = new VBox(10);
        pane.setPadding(new Insets(40));
        GridPane grid = new GridPane();

        for (int i = 0; i < row; i++) {
            for (int k = 0; k < col; k++) {
                // Set the button number as text for the button
                Button button = new Button(Integer.toString((row * col - 2 * i - 1) + k));

                button.setPrefWidth(100);
                button.setStyle("-fx-font: 22 arial; -fx-base: LightGray");

                // Add the button to the pane and set the handler
                grid.add(button, k, i);
                button.setOnAction(buttonHandler);
            }
        }
        return grid;
    }

答案 1 :(得分:0)

兑换这个:

pane.getChildren().add(buttonsArray[i][k]);

用这个:

grid.add(buttonsArray[i][k],k,i);

这是James_D在评论中提出的建议。