JavaFX - 使 TableView 高度适应行数
Posted
技术标签:
【中文标题】JavaFX - 使 TableView 高度适应行数【英文标题】:JavaFX - Adapt TableView height to number of rows 【发布时间】:2015-03-12 19:21:15 【问题描述】:我希望我的 TableView 的高度适应填充的行数,这样它就不会显示任何空行。换句话说,TableView 的高度不应超过最后填充的行。我该怎么做?
【问题讨论】:
我不明白为什么人们会以“不清楚你在问什么”或“太宽泛”为由投票结束这个问题。问题说得很清楚,也很具体。如果您投票结束,请发表评论并解释原因。 在我看来,这个问题对于任何使用过 JavaFX 的人来说都是非常清楚的(尤其是使用TableView
s,但即使没有)。我注意到投票结束的人都没有回答一个 JavaFX 问题。 “我不熟悉该技术”并不是结束问题的真正理由。投票重新开放...
我通常做table.setPrefHeight();摆脱我眼中的那些空行XD
相关问题(有工作答案,让我有偏见;),有些人可能称之为重复 - ***.com/a/26364210/203657
【参考方案1】:
如果你想让它工作,你必须设置fixedCellSize
。
然后您可以将TableView
的高度绑定到表格中包含的项目的大小乘以固定的单元格大小。
演示:
@Override
public void start(Stage primaryStage)
TableView<String> tableView = new TableView<>();
TableColumn<String, String> col1 = new TableColumn<>();
col1.setCellValueFactory(cb -> new SimpleStringProperty(cb.getValue()));
tableView.getColumns().add(col1);
IntStream.range(0, 20).mapToObj(Integer::toString).forEach(tableView.getItems()::add);
tableView.setFixedCellSize(25);
tableView.prefHeightProperty().bind(tableView.fixedCellSizeProperty().multiply(Bindings.size(tableView.getItems()).add(1.01)));
tableView.minHeightProperty().bind(tableView.prefHeightProperty());
tableView.maxHeightProperty().bind(tableView.prefHeightProperty());
BorderPane root = new BorderPane(tableView);
root.setPadding(new Insets(10));
Scene scene = new Scene(root, 400, 400);
primaryStage.setScene(scene);
primaryStage.show();
注意:我乘以 fixedCellSize *(数据大小 + 1.01)以包含标题行。
【讨论】:
hmm .. 对我不起作用(任意因素几乎肯定迟早会失败;) “不起作用”是什么意思?更多细节会很好.. ;-) 这是显示垂直滚动条的方式(顺便说一句:如果您忘记了@somenick,那么 somenick 将不会收到通知) @kleopatra 是的,这是找到正确的表头高度的斗争。似乎您的标题很大和/或您的屏幕 DPI 使标题更大.. @eckig 它对我不起作用。我在调试 Bindings.size(tableView.getItems()) 时得到 IntegerBinding [invalid]。以上是关于JavaFX - 使 TableView 高度适应行数的主要内容,如果未能解决你的问题,请参考以下文章
如何使用CSS来设置两个相邻TableView的边框样式,使它们看起来像是JavaFX 11中的单个TableView(OpenJFX 11)