java - GridPane JavaFx 中的冗余单元格

标签 java javafx gridpanel

我是 JavaFX 新手,我想创建一个包含一些列和行的网格示例。网格如下: - 第一行:第一个单元格(宽度 = 100)占据 1 列,第二个单元格(宽度 = 200)占据 2 列 - 第二行:第一个(宽度 = 200)单元格占据 2 列,第二个单元格(宽度 = 100)占据 1 列

但我不知道为什么会出现一个意外的单元格。如下图:

enter image description here

我的代码如下:

     // Label 1
     Label lbl1 = new Label("Label1");
     lbl1.setPrefWidth(100);
     lbl1.setStyle("-fx-border-style: solid; -fx-background-color: #80aaff; -fx-border-width: 0.25");
     // Label 2
     Label lbl2 = new Label("Label2");
     lbl2.setStyle("-fx-border-style: solid; -fx-background-color:#ff80bf; -fx-border-width: 0.25");
     lbl2.setPrefWidth(200);
     // Label 3
     Label lbl3 = new Label("Label3");
     lbl3.setPrefWidth(200);
     lbl3.setStyle("-fx-border-style: solid; -fx-background-color:#66ff99; -fx-border-width: 0.25");
     // Label 4
     Label lbl4 = new Label("Label4");
     lbl4.setPrefWidth(100);
     lbl4.setStyle("-fx-border-style: solid; -fx-background-color: #ffff66; -fx-border-width: 0.25");

     GridPane gridPane = new GridPane();
     gridPane.setStyle("-fx-border-style: solid");

     // column 0, row 0, column span 1, row span 1
     gridPane.add(lbl1, 0, 0, 1, 1);
     // column 1, row 0, column span 2, row span 1
     gridPane.add(lbl2, 1, 0, 2, 1);
     // column 0, row 1, column span 1, row span 1
     gridPane.add(lbl3, 0, 1, 2, 1);
     // column 2, row 1, column span 2, row span 1
     gridPane.add(lbl4, 2, 1, 1, 1);

谁能指出我的问题吗? 谢谢。

最佳答案

具有列跨度/重叠列的 GridPane 的首选宽度的计算通常无法按预期工作。您看到的“单元格”是 GridPane 的背景,未被任何子项覆盖。

为避免 GridPane 变得太大,请通过 ColumnConstraints 设置列宽:

// Label 1
Label lbl1 = new Label("Label1");
lbl1.setMaxWidth(Double.MAX_VALUE);
lbl1.setStyle("-fx-border-style: solid; -fx-background-color: #80aaff; -fx-border-width: 0.25");
// Label 2
Label lbl2 = new Label("Label2");
lbl2.setStyle("-fx-border-style: solid; -fx-background-color:#ff80bf; -fx-border-width: 0.25");
lbl2.setMaxWidth(Double.MAX_VALUE);
// Label 3
Label lbl3 = new Label("Label3");
lbl3.setMaxWidth(Double.MAX_VALUE);
lbl3.setStyle("-fx-border-style: solid; -fx-background-color:#66ff99; -fx-border-width: 0.25");
// Label 4
Label lbl4 = new Label("Label4");
lbl4.setMaxWidth(Double.MAX_VALUE);
lbl4.setStyle("-fx-border-style: solid; -fx-background-color: #ffff66; -fx-border-width: 0.25");

GridPane gridPane = new GridPane();

ColumnConstraints constraints = new ColumnConstraints(100);
gridPane.getColumnConstraints().addAll(constraints, constraints, constraints);

gridPane.setStyle("-fx-border-style: solid");

// column 0, row 0, column span 1, row span 1
gridPane.add(lbl1, 0, 0);
// column 1, row 0, column span 2, row span 1
gridPane.add(lbl2, 1, 0, 2, 1);
// column 0, row 1, column span 1, row span 1
gridPane.add(lbl3, 0, 1, 2, 1);
// column 2, row 1, column span 2, row span 1
gridPane.add(lbl4, 2, 1);

但这并不能阻止调整窗口大小时重新出现空白的“空间”。要对所有列使用相同的大小,而不管 GridPane 的宽度如何,请使用 percentWidth:

ColumnConstraints constraints = new ColumnConstraints();
constraints.setPercentWidth(100d/3d);
gridPane.setPrefWidth(300);

关于java - GridPane JavaFx 中的冗余单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51302483/

相关文章:

JavaFX查看: Is there a difference between add and setConstraints?

java - Platform.runLater,处理大量任务太慢

extjs - 在extjs中动态更新记录中的字段

java - Eclipse:javac:目标版本 1.6 与默认源版本 1.7 冲突

java - 凭空安全

java - 将对象添加到列表并将这些列表对象添加到带有按钮的 Pane

sorting - ExtJs 网格中可排序为 false 后列标题显示箭头图标

java - 什么是实现类型安全配置重新加载的好方法

java - Base64 解码并解压缩字符串

.net - Ext.net rowexpander 调整标题大小而不调整内容大小