【问题标题】:Unequal sized buttons JavaFX大小不等的按钮JavaFX
【发布时间】:2017-05-17 05:36:01
【问题描述】:

当我使用以下代码在网格窗格中创建 2 个按钮时,它给了我 2 个大小不等的按钮。我该如何解决这个问题?

/**
 * Set the appearance of buttons in the grid
 */
private void setButtonAppearance(Button button)
{
    button.setAlignment(Pos.CENTER);
    //button.setFont(font);
    button.setMaxSize(Double.MAX_VALUE, Double.MAX_VALUE);
    button.setMinSize(Double.MIN_VALUE, Double.MIN_VALUE);
    // doesn't start with focus or stay focused
    button.setFocusTraversable(false);
}

/**
 * Create buttons to perform allocation and deallocation of events to venues
 */
private void addButtons()
{
    allocateButton = new Button("Allocate Event");
    deallocateButton = new Button("Deallocate Event");

    //Set appearance of buttons
    setButtonAppearance(allocateButton);
    setButtonAppearance(deallocateButton);

    gridPane.add(allocateButton, 5, 30, 10, 1);
    gridPane.add(deallocateButton, columns-15, 30, 10, 1);
}

输出:

问候!

【问题讨论】:

  • 为什么不用前缀宽度?

标签: button javafx


【解决方案1】:

有两种可能的解决方案,要么为按钮设置首选宽度

private void setButtonAppearance(Button button) {
    button.setPrefWidth(60);
}

或将按钮所在的列设置为具有相同的约束。像这样的东西。注意,默认情况下,getColumnConstraints() 数组中没有任何 ColumnConstraint 对象。

gridPane.getColumnConstraints()
        .add(new ColumnConstraints(10, 100, Double.MAX_VALUE, Priority.ALWAYS, HPos.CENTER, true));
gridPane.getColumnConstraints()
        .add(new ColumnConstraints(10, 100, Double.MAX_VALUE, Priority.ALWAYS, HPos.CENTER, true));

独立示例

@Override
public void start(Stage primaryStage) throws Exception {
    Button allocateButton = new Button("Allocate Event");
    Button deallocateButton = new Button("Deallocate Event");

    setButtonAppearance(allocateButton);
    setButtonAppearance(deallocateButton);

    GridPane gridPane = new GridPane();
    gridPane.add(allocateButton, 0, 0, 1, 1);
    gridPane.add(deallocateButton, 2, 0, 1, 1);
    gridPane.getColumnConstraints()
            .add(new ColumnConstraints(10, 100, Double.MAX_VALUE, Priority.ALWAYS, HPos.CENTER, true));
    gridPane.getColumnConstraints()
            .add(new ColumnConstraints(10, 100, Double.MAX_VALUE, Priority.ALWAYS, HPos.CENTER, true));
    gridPane.getColumnConstraints()
            .add(new ColumnConstraints(10, 100, Double.MAX_VALUE, Priority.ALWAYS, HPos.CENTER, true));

    primaryStage.setScene(new Scene(gridPane));
    primaryStage.show();
}

private void setButtonAppearance(Button button) {
    button.setAlignment(Pos.CENTER);
    // button.setFont(font);
    button.setMaxSize(Double.MAX_VALUE, Double.MAX_VALUE);
    button.setMinSize(Double.MIN_VALUE, Double.MIN_VALUE);
    // doesn't start with focus or stay focused
    button.setFocusTraversable(false);
}

无论哪种方式,我都建议不要手动编写 JavaFX 布局,而是利用 Scene Builder 和 FXML...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    • 2018-03-15
    • 1970-01-01
    • 2014-12-16
    相关资源
    最近更新 更多