java - 如何在 javafx 中添加文本框而不移动按钮

标签 java javafx

我正在尝试创建一个 javafx 程序来显示一些文本框和按钮,但每次添加文本框时,它最终都会移动按钮。

    GridPane pane = new GridPane();
    pane.setAlignment(Pos.CENTER);
    pane.setPadding(new Insets(11.5, 12.5, 13.5, 14.5));
    pane.setHgap(6);
    pane.setVgap(7);

    pane.add(new Label("Text1:"), 0, 3);
    pane.add(new TextField(), 1, 3);
    pane.add(new TextField(), 1, 3, 1, 1);
    pane.add(new Label("Text2:"), 2, 3);
    pane.add(new TextField(), 3, 3);
    pane.add(new Label("Text3:"), 4, 3);
    pane.add(new TextField(), 5, 3);

    Button bt1 = new Button("Button");
    bt1.setMinSize(70, 0);
    pane.add(bt1, 1, 4);
    Button bt2 = new Button("Button");
    bt2.setMinSize(70, 0);
    pane.add(bt2, 2, 4);
    Button bt3 = new Button("Button");
    bt3.setMinSize(70, 0);
    pane.add(bt3, 3, 4);

我希望文本框更靠近标签,按钮之间的空间更小。

最佳答案

GridPane 对齐同一行/列中的节点,并且(假设除 1 之外没有使用行/列跨度)确保位于不同行/列中的节点不会重叠 a 的范围节点采用垂直/水平方向。

您试图独立对齐 Labels/TextFields 和 Buttons,但这不起作用,至少不起作用除非你让事情变得不必要的复杂。

我建议不要使用 GridPane,而是简单地使用包含 2 个 HBoxVBox:

@Override
public void start(Stage primaryStage) throws Exception {
    HBox textFieldContainer = new HBox(
            new Label("Text1:"),
            new TextField(),
            new Label("Text2:"),
            new TextField(),
            new Label("Text3:"),
            new TextField());
    textFieldContainer.setSpacing(6);
    textFieldContainer.setAlignment(Pos.CENTER_LEFT);

    // add margin to all but the first Label/TextField pairs
    Insets innerLabelInsets = new Insets(0, 0, 0, 20);
    List<Node> children = textFieldContainer.getChildren();
    for (int i = 2, size = children.size(); i < size; i +=2) {
        HBox.setMargin(children.get(i), innerLabelInsets);
    }

    Button bt1 = new Button("Button");
    bt1.setMinSize(70, 0);
    Button bt2 = new Button("Button");
    bt2.setMinSize(70, 0);
    Button bt3 = new Button("Button");
    bt3.setMinSize(70, 0);
    HBox buttonContainer = new HBox(bt1, bt2, bt3);
    buttonContainer.setSpacing(6);

    VBox pane = new VBox(textFieldContainer, buttonContainer);
    pane.setPadding(new Insets(11.5, 12.5, 13.5, 14.5));
    pane.setSpacing(7);

    Scene scene = new Scene(pane);

    primaryStage.setScene(scene);
    primaryStage.show();
}

关于java - 如何在 javafx 中添加文本框而不移动按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56695307/

相关文章:

java - 打印 JavaFX WebView

java - 如何判断某个键是否包含在 Hashmap 中的非命名 Hashmap 中? Java、JavaFX

java - 运行大量数据时与 platfOrm 的连接重置

具有嵌入式数据库的 Java EE

java - DecimalFormat,如何通过模式设置最大整数位数?

java - 如何改变这个按钮的 float ?

java - JavaFX 2.0 中的绑定(bind)

jvm - 什么是共享对象文件?

java - 拆分从android发送到php的嵌套数组

带有 static 关键字的 JavaFX 问题;带有最小的、完整的和可验证的示例