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