javaFX中网格列之间的填充

javaFX中网格列之间的填充,javafx,Javafx,我试图在javaFX程序中显示一个4列网格。这就是我设置网格的方式 GridPane gridPane = new GridPane(); gridPane.setHgap(10); gridPane.setVgap(10); ColumnConstraints c1 = new ColumnConstraints(); c1.setPercentWidth(25); ColumnConstraints c2 = new ColumnConstraints(); c2.setPe

我试图在javaFX程序中显示一个4列网格。这就是我设置网格的方式

 GridPane gridPane = new GridPane();
 gridPane.setHgap(10); 
 gridPane.setVgap(10);
 ColumnConstraints c1 = new ColumnConstraints();
 c1.setPercentWidth(25);
 ColumnConstraints c2 = new ColumnConstraints();
 c2.setPercentWidth(25);
 ColumnConstraints c3 = new ColumnConstraints();
 c3.setPercentWidth(25);
 ColumnConstraints c4 = new ColumnConstraints();
 c4.setPercentWidth(25);
 gridPane.getColumnConstraints().addAll(c1,c2,c3,c4);
我已将标签和文本字段分别放在第1、3列和第2、4列中。问题是textfield和下一个标签之间存在间隙,因此第二个textfield的宽度减小


如何解决这个问题?

这里是一个使用GridPane的非常简单的
应用程序。它使用与您的示例相同的
gridPane列约束
,并具有
Label的
TextField的

如果您担心标签和文本字段之间的间隙,必须记住gridpane的总宽度分为4个部分(每个25%)。文本字段填充空间,标签也填充空间,但我们只看到文本

MVCE代码:

public class GridPaneExample extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {
        GridPane gridPane = new GridPane();
        gridPane.setHgap(10);
        gridPane.setVgap(10);
        gridPane.setPadding(new Insets(10));
        ColumnConstraints c1 = new ColumnConstraints();
        c1.setPercentWidth(25);
        ColumnConstraints c2 = new ColumnConstraints();
        c2.setPercentWidth(25);
        ColumnConstraints c3 = new ColumnConstraints();
        c3.setPercentWidth(25);
        ColumnConstraints c4 = new ColumnConstraints();
        c4.setPercentWidth(25);
        gridPane.getColumnConstraints().addAll(c1, c2, c3, c4);

        gridPane.add(new Label("Profile ID"), 0, 0);
        gridPane.add(new TextField(), 1, 0);
        gridPane.add(new Label("Profile Name"), 2, 0);
        gridPane.add(new TextField(), 3, 0);
        gridPane.add(new Label("Transfer Object"), 0, 1);
        gridPane.add(new TextField(), 1, 1);
        gridPane.add(new Label("Class Name"), 2, 1);
        gridPane.add(new TextField(), 3, 1);
        primaryStage.setScene(new Scene(gridPane, 500, 500));
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

如果你仍然无法调整代码并修复它,考虑编辑你的代码并添加一个

,你可以使用很多其他属性。您可能希望标签正确对齐;您可能还希望文本字段增长并填充空间,而标签只需要足够的空间来容纳文本。所以我会做一些类似的事情:

GridPane gridPane = new GridPane();
 gridPane.setHgap(10); 
 gridPane.setVgap(10);
 ColumnConstraints c1 = new ColumnConstraints();
 c1.setHalignment(HPos.RIGHT);
 c1.setHgrow(Priority.NEVER);
 ColumnConstraints c2 = new ColumnConstraints();
 c2.setHgrow(Priority.ALWAYS);
 c2.setFillWidth(true);
 ColumnConstraints c3 = new ColumnConstraints();
 c3.setHalignment(HPos.RIGHT);
 c3.setHgrow(Priority.NEVER);
 ColumnConstraints c4 = new ColumnConstraints();
 c4.setHgrow(Priority.ALWAYS);
 c4.setFillWidth(true);
 gridPane.getColumnConstraints().addAll(c1,c2,c3,c4);

使用
gridPane.gridLinesVisibleProperty().set(true)打开网格线。也许你看到了定位的原因。另外,请发布场景的完整代码-gridPane是否包含在其他容器中?