我目前正在尝试将应用程序迁移到JavaFX(实际上是部分地使用AWT),而将带有边框布局的JPanels切换到BorderPanes相当容易,但是我很难弄清楚如何使用GridBagLayout和GridPanes做到这一点。 。 (我以前从未在Swing中使用过此布局)
在我的代码中,GridBagLayout使用了2次(并且我不确定这是否是自动生成的代码):
JPanel bottomMessagePanel = new JPanel();
bottomMessagePanel.setLayout(new GridBagLayout());
bottomMessagePanel.setBorder(BorderFactory.createEmptyBorder());
bottomMessagePanel.add(someJComponent, new GridBagConstraints(0, 0, 1, 1, .35, 1, GridBagConstraints.WEST, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0));
bottomMessagePanel.add(someOtherJComponent, new GridBagConstraints(1, 0, 1, 1, .65, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0));
和
JPanel stepPanel = new JPanel();
stepPanel.setLayout(new GridBagLayout());
stepPanel.add(someJComponent, new GridBagConstraints(1, 0, 1, 1, 0, 0, GridBagConstraints.EAST, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0));
stepPanel.add(someOtherJComponent, new GridBagConstraints(0, 0, 1, 1, 0, 0, GridBagConstraints.EAST, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0));
stepPanel.add(some3rdJComponent, new GridBagConstraints(2, 0, 1, 1, 0, 0, GridBagConstraints.EAST, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0));
我将如何使用JavaFX GridPane做到这一点?
不用担心转换那些JComponent,因为我已经转换了那些...
任何帮助都非常感谢!
最佳答案
您指定将值传递给构造函数的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
通常,您使用
add
的相应GridPane
方法来指定这些值。在JavaFX中,它们分别称为columnIndex
,rowIndex
,columnSpan
和rowSpan
。如果columnSpan
和rowSpan
为1,则使用带有3个参数的add
方法就足够了:gridPane.add(node, gridx, gridy);
如果
columnSpan
/ rowSpan
之一较大,则可以使用该方法的重载版本:gridPane.add(node, gridx, gridy, gridwidth, gridheight);
weightx,重
那些没有直接的等价物。相反,您需要使用
percentWidth
和percentHeight
中的ColumnConstraints
和RowConstraints
为整个行/列定义此名称(除非您对标准布局感到满意)。行和列约束将添加到
columnConstraints
和rowConstraints
列表中。锚
您可以为此使用
halignment
/ valignment
的ColumnConstrants
/ RowConstraints
属性,或使用GridPane.setHalignment
和GridPane.setValignment
为单个节点指定此属性:GridPane.setHalignment(node, HPos.LEFT);
GridPane.setValignment(node, VPos.TOP);
填
等效的方法是设置行约束和列约束的
fillHeight
和fillWidth
值,以使用GridPane.setFillWidth
和GridPane.setFillHeight
为单个节点指定此值: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
个方法可让您一次设置多个约束,例如setConstraints(Node child, int columnIndex, int rowIndex, int columnspan, int rowspan, HPos halignment, VPos valignment, Priority hgrow, Priority vgrow, Insets margin)
关于java - JPanel GridBagLayout到GridPane,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39414189/