【问题标题】:Redundant cell in GridPane JavaFxGridPane JavaFx 中的冗余单元格
【发布时间】:2018-12-20 11:57:51
【问题描述】:

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

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

我的代码如下:

     // 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);

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

【问题讨论】:

  • 请阅读stackoverflow.com/help/mcve并采取相应措施。
  • 感谢您的评论。我检查了文章,但我不知道我的问题格式错误以及我必须如何编辑。你能告诉我清楚吗

标签: java javafx gridpanel


【解决方案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);

【讨论】:

  • 嗨 fabian,在 SWT 中,我可以通过 GridLayout(100, true) 创建具有指定列(例如:100 列)的布局,列的大小基于布局的大小(布局将水平填充) 和列数我可以在 JavaFX 中制作吗?
  • JavaFX 等价物是int columnCount = 100; ColumnConstraints constraints = new ColumnConstraints(); constraints.setPercentWidth(100d / columnCount); for (int i = 0; i < columnCount; i++) gridPane.getColumnConstraints().add(constraints);
猜你喜欢
  • 2016-01-27
  • 2014-01-06
  • 2018-06-16
  • 2019-05-11
  • 2021-01-05
  • 2018-03-15
  • 1970-01-01
  • 2021-03-17
相关资源
最近更新 更多