gpt4 book ai didi

JavaFX布局对齐方式,等同于GridBagLayout

转载 作者:行者123 更新时间:2023-12-03 21:40:22 24 4
gpt4 key购买 nike

我想知道是否有人对 JavaFX 8 有很多经验。我正在做一些表单布局并需要对齐它们(我有点强制症)。我知道在 Swing 中我可以使用 GridBagLayout,但这不再适用,我可以在其中设置权重等等,但我认为我不能使用 GridPane 做到这一点,在 JavaFX 中是否有与此等效的东西?

我无法发布图片,所以我将其链接到目前的样子,并突出显示了一些我不想要的区域。

https://gyazo.com/c112ab623ffd66e6f723eb9be1fcaea9

之前也有代码

    public class ControlsPanel extends GridPane {
private TextField[] buttons;
private TextField[] miscTextFields;

private Label[] labels;

private Button startSimBtn;

private TabPane tabPane;
private Tab cooperatorTab, defectorTab;
private final int PADDING = 5;
private final String[] v =
{
"C_A_N", "C_A_PD",
"C_A_PN", "C_N_N",
"C_N_PD", "C_N_PN",
"D_A_N", "D_A_PD",
"D_A_PN", "D_N_N",
"D_N_PD", "D_N_PN"
};
private final String[] miscTfLabelValues =
{
"Apology cost: ", "Noise level: ", "Punishmment Cost: ", "Punished Cost: "
};

public ControlsPanel()
{
buttons = new TextField[12];
labels = new Label[buttons.length];
miscTextFields = new TextField[miscTfLabelValues.length];

for(int k = 0; k < miscTfLabelValues.length; k++)
{
miscTextFields[k] = new TextField();
}

for(int j = 0; j < buttons.length; j++)
{
buttons[j] = new TextField();
}

for(int i = 0; i < v.length; i++)
{
labels[i] = new Label(v[i]);
}

tabPane = new TabPane();
startSimBtn = new Button("Start");

cooperatorTab = new Tab("Cooperator");
defectorTab = new Tab("Defector");

layoutComponents();
}

private void layoutComponents()
{
setAlignment(Pos.TOP_LEFT);

cooperatorTab.setContent(layoutCooperatorTab());
cooperatorTab.setClosable(false);
defectorTab.setContent(layoutDefectorTab());
defectorTab.setClosable(false);

tabPane.getTabs().addAll(cooperatorTab, defectorTab);

getColumnConstraints().add(new ColumnConstraints(Values.SCREEN_WIDTH));

add(tabPane, 0, 0);

add(layoutMiscPane(), 0, 1);
}

private GridPane layoutMiscPane()
{
GridPane pane = new GridPane();

pane.setAlignment(Pos.TOP_LEFT);
pane.setHgap(10);
pane.setVgap(10);
pane.setPadding(new Insets(PADDING,PADDING,PADDING, 15));


pane.setPadding(new Insets(0, 75, 15, 15));
pane.add(new Label(miscTfLabelValues[0]), 0, 1);

pane.add(miscTextFields[0], 1, 1);

pane.setPadding(new Insets(0, -100, 0, 0));
pane.add(new Label(miscTfLabelValues[1]), 0, 2);

pane.add(miscTextFields[1], 1, 2);

//
pane.add(new Label(miscTfLabelValues[2]), 0, 3);

pane.add(miscTextFields[2], 1, 3);

//
pane.add(new Label(miscTfLabelValues[3]), 0, 4);

pane.add(miscTextFields[3], 1, 4);

return pane;

}
private GridPane layoutCooperatorTab()
{

GridPane pane = new GridPane();

pane.setAlignment(Pos.TOP_LEFT);
pane.setHgap(10);
pane.setVgap(10);
pane.setPadding(new Insets(PADDING,PADDING,PADDING, 15));

pane.add(labels[0], 0, 1);

pane.add(buttons[0], 1, 1);

pane.add(labels[1], 0, 2);

pane.add(buttons[1], 1, 2);

//
pane.add(labels[2], 0, 3);

pane.add(buttons[2], 1, 3);

//
pane.add(labels[3], 0, 4);

pane.add(buttons[3], 1, 4);


//
pane.add(labels[4], 0, 5);

pane.add(buttons[4], 1, 5);

//
pane.add(labels[5], 0, 6);

pane.add(buttons[5], 1, 6);

return pane;
}
private GridPane layoutDefectorTab()
{
GridPane pane = new GridPane();

pane.setAlignment(Pos.TOP_LEFT);
pane.setHgap(10);
pane.setVgap(10);
pane.setPadding(new Insets(PADDING,PADDING,PADDING,15));

pane.add(labels[6], 0, 1);

pane.add(buttons[6], 1, 1);

pane.add(labels[7], 0, 2);

pane.add(buttons[7], 1, 2);

//
pane.add(labels[8], 0, 3);

pane.add(buttons[8], 1, 3);

//
pane.add(labels[9], 0, 4);

pane.add(buttons[9], 1, 4);


//
pane.add(labels[10], 0, 5);

pane.add(buttons[10], 1, 5);

//
pane.add(labels[11], 0, 6);

pane.add(buttons[11], 1, 6);

return pane;
}
}

最佳答案

GridPane 确实是 JavaFX 中最接近 Swing 的 GridBagLayout 的对等物。通过使用 ColumnConstraintsRowConstraints 对象,您可以在很大程度上控制列和行的空间分配。这些可以分配绝对最小/优先/最大大小(列宽和行高),或者可以分配总宽度/高度的百分比。如果 GridPane 增长大于首选大小,您还可以为增长分配优先级,并为单元格包含的空间多于其节点使用的空间分配对齐属性。

另外,GridPane中有静态方法可以设置节点的属性;这允许在逐个节点的基础上控制对齐和增长优先级,还允许您为每个节点指定边距。

例如,在您的 layoutMiscPane() 方法中,您可能会这样做

ColumnConstraints leftCol = new ColumnConstraints();
leftCol.setHalignment(HPos.RIGHT);
ColumnConstraints rightCol = new ColumnConstraints();
rightCol.setHgrow(Priority.ALWAYS);
rightCol.setfillWidth(true);

pane.getColumnConstraints().addAll(leftCol, rightCol);

参见 documentation for GridPane还有 ColumnConstraintsRowConstraints .

关于JavaFX布局对齐方式,等同于GridBagLayout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32543593/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com