Javafx 2:如何删除Gridpane中的行或列

Nat*_*tty 3 javafx-2 gridpane

如果我想在JavaFx中以编程方式添加一行文本字段,我可以简单地使用gridpane add方法

这会在第1行添加一组文本字段.

for (int i = 0; i < Fields.size(); i++) {
   gridpane.add(new TextField(), i, 1);
}
Run Code Online (Sandbox Code Playgroud)

同样,如何删除一行?我找不到合适的方法来在JavaFX中方便地删除行/列.

Jam*_*s_D 8

没有直接等效的方法.要删除节点,只需使用 gridpane.getChildren().remove(...);gridpane.getChildren().removeAll(...);传入要从窗格中删除的节点.

  • 这似乎没有从窗格中删除行或列,如果我尝试通过从最后的行和列中删除"节点"来缩小网格,其他行和列不会展开以填充空间,行和列仍在那里...... (2认同)
  • 在JavaFX中,布局是自上而下的; 即`GridPane`占据的空间(及其定位)由其父节点决定.所以这听起来像是你如何管理布局的问题(但也许你的`GridPane`上有错误的行和/或列约束).您应该发布一个问题,显示您正在尝试做什么,以及一些代码. (2认同)

Rub*_*922 5

在 Java 8+ 中,您可以使用removeIf

gridPane.getChildren().removeIf(node -> GridPane.getRowIndex(node) == rowNumber);
Run Code Online (Sandbox Code Playgroud)

警告
如果从第 0 行删除项目,还要检查GridPane.getRowIndex(node) == null,即

node -> GridPane.getRowIndex(node) == null || GridPane.getRowIndex(node) == 0
Run Code Online (Sandbox Code Playgroud)

(我认为这是 JavaFX 留下的行号,就像null在 FXML 中的相应元素中没有给出行号一样,即使在 FXML 中没有给出行号意味着该元素位于第 0 行,因为默认行是第 0 行。 )