pet*_*on1 2 java user-interface javafx
我想知道是否有人对JavaFX 8有很多经验.我正在做一些表格布局并且需要对齐它们(我是用这个东西强调OCD).我知道在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;
}
}
Run Code Online (Sandbox Code Playgroud)
GridPane确实是JavaFX中与Swing最接近的等价物GridBagLayout.通过使用ColumnConstraints和RowConstraints对象,您可以很好地控制空间到列和行的分配.这些可以分配绝对最小/最大/最大尺寸(列的宽度和行的高度),或者可以分配总宽度/高度的百分比.如果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);
Run Code Online (Sandbox Code Playgroud)
请参阅文档GridPane以及for ColumnConstraints和RowConstraints.
| 归档时间: |
|
| 查看次数: |
1887 次 |
| 最近记录: |