Java JPanel GridBagLayout到GridPane

Java JPanel GridBagLayout到GridPane,java,swing,user-interface,javafx,Java,Swing,User Interface,Javafx,我目前正在尝试将一个应用程序迁移到JavaFX(它实际上部分使用了AWT),虽然将带有边框布局的JPanel切换到边框窗格相当容易,但我在弄清楚如何使用GridBagLayout和GridPanes时遇到了一些麻烦。(我以前从未在Swing中使用过此布局) 在我的代码中,GridBagLayout使用了2次(我不确定这是否是自动生成的代码): 及 如何使用JavaFXGridPane实现这一点? 不要担心转换那些JComponents,因为我已经转换了它们 非常感谢您的帮助 指定将值传递给构造函

我目前正在尝试将一个应用程序迁移到JavaFX(它实际上部分使用了AWT),虽然将带有边框布局的JPanel切换到边框窗格相当容易,但我在弄清楚如何使用GridBagLayout和GridPanes时遇到了一些麻烦。(我以前从未在Swing中使用过此布局)
在我的代码中,GridBagLayout使用了2次(我不确定这是否是自动生成的代码):

如何使用JavaFXGridPane实现这一点?
不要担心转换那些JComponents,因为我已经转换了它们


非常感谢您的帮助

指定将值传递给构造函数的
GridBagConstraints

GridBagConstraints(
        int gridx,
        int gridy,
        int gridwidth,
        int gridheight,
        double weightx,
        double weighty,
        int anchor,
        int fill,
        Insets insets,
        int ipadx,
        int ipady)
让我们描述一下如何在JavaFX中使用这些参数的等价物:

Node node = ...
GridPane gridPane = ...
gridx,gridy,gridwidth,gridheight 通常使用
GridPane
的相应
add
方法来指定这些值。它们在JavaFX中被称为
columnIndex
rowIndex
columnSpan
rowSpan
。如果
columnSpan
rowSpan
为1,则使用包含3个参数的
add
方法即可:

gridPane.add(node, gridx, gridy);
如果
列span
/
行span
中的一个更大,则可以使用重载版本的方法:

gridPane.add(node, gridx, gridy, gridwidth, gridheight);
重的,重的 这些没有直接的等价物。相反,您需要使用和的
percentWidth
percentHeight
为整行/整列定义此属性(除非您对标准布局感到满意)

行和列约束将添加到和列表中

锚 您可以使用
ColumnConstrants
/
行约束的
halignment
属性进行此操作,或者使用
GridPane.setHalignment
GridPane.setValignment
为单个节点指定此操作:

GridPane.setHalignment(node, HPos.LEFT);
GridPane.setValignment(node, VPos.TOP);
填满 这相当于使用
GridPane.setFillWidth
GridPane.setFillHeight
为单个节点指定行和列约束的
fillHeight
fillHeight
值:

GridPane.setFillWidth(node, Boolean.FALSE);
GridPane.setFillHeight(node, Boolean.FALSE);
这些属性的默认值为
true

插图 您可以使用
GridPane.setMargin
来指定这一点。如果对所有值使用
0
,则无需指定此值

GridPane.setMargin(node, new Insets(top, right, bottom, left));
ipadx,ipady JavaFX中没有与此对应的工具


static
setConstraints
方法允许您一次设置多个约束,例如:


指定将值传递给构造函数的
GridBagConstraints

GridBagConstraints(
        int gridx,
        int gridy,
        int gridwidth,
        int gridheight,
        double weightx,
        double weighty,
        int anchor,
        int fill,
        Insets insets,
        int ipadx,
        int ipady)
让我们描述一下如何在JavaFX中使用这些参数的等价物:

Node node = ...
GridPane gridPane = ...
gridx,gridy,gridwidth,gridheight 通常使用
GridPane
的相应
add
方法来指定这些值。它们在JavaFX中被称为
columnIndex
rowIndex
columnSpan
rowSpan
。如果
columnSpan
rowSpan
为1,则使用包含3个参数的
add
方法即可:

gridPane.add(node, gridx, gridy);
如果
列span
/
行span
中的一个更大,则可以使用重载版本的方法:

gridPane.add(node, gridx, gridy, gridwidth, gridheight);
重的,重的 这些没有直接的等价物。相反,您需要使用和的
percentWidth
percentHeight
为整行/整列定义此属性(除非您对标准布局感到满意)

行和列约束将添加到和列表中

锚 您可以使用
ColumnConstrants
/
行约束的
halignment
属性进行此操作,或者使用
GridPane.setHalignment
GridPane.setValignment
为单个节点指定此操作:

GridPane.setHalignment(node, HPos.LEFT);
GridPane.setValignment(node, VPos.TOP);
填满 这相当于使用
GridPane.setFillWidth
GridPane.setFillHeight
为单个节点指定行和列约束的
fillHeight
fillHeight
值:

GridPane.setFillWidth(node, Boolean.FALSE);
GridPane.setFillHeight(node, Boolean.FALSE);
这些属性的默认值为
true

插图 您可以使用
GridPane.setMargin
来指定这一点。如果对所有值使用
0
,则无需指定此值

GridPane.setMargin(node, new Insets(top, right, bottom, left));
ipadx,ipady JavaFX中没有与此对应的工具


static
setConstraints
方法允许您一次设置多个约束,例如:


谢谢你的回答。这对我帮助很大!您可以为其中一个组件添加一个代码示例吗?@RoiEX您应该可以在这里、这里以及javadoc中找到一些示例……请注意,
hgrow
vgrow
属性可以通过静态方法在单个节点上设置,也可以在
ColumnConstraints
RowConstraints
上设置,分别提供与
weightx
weighty
类似的功能。但是,它们不采用连续的值刻度,而是只取三个值:
从不
(相当于
权重x=0
)、
始终
(相当于
权重x
是布局中所有
权重x
的最大值),以及
有时
(相当于
weightx
等于0和最大值之间的某个固定值).GridPane提供了一个静态方法
setConstraints
类似于swing add方法…您可能需要编辑一点答案…@RoiEX:在这里使用原语没有帮助。它只会导致不必要的自动装箱,导致相同的对象作为参数传递。谢谢您的回答。这对我有很大帮助!您可以添加一个cod吗例如,其中一个组件的示例?@RoiEX您应该能够在这里、这里以及t中找到一些示例