我正在编写一个简单的问题应用程序。我在自定义javaFX组件(代表一个问题)中使用TableView,它在ListView中用作ListCell(用于表示整个问卷)。
我想要的是:每个ListCell使用尽可能少的空间(或必要的),同时仍然显示其全部内容。
会发生什么:TableView似乎默认为标准尺寸。如果表具有更多内容,则会在ScrollPane中显示其内容。如果TableView的内容较少,则会填充空白空间。
我试图通过多种方式解决我的问题:
最初我假设必须有一种方法停用滚动条。但我找不到任何办法。
然后我尝试通过更改PreferredSizeProperty来更改表的大小:
table.setPrefHeight()
但我找不到有关桌子有多大的任何信息。
table.setPrefHeight(USE_COMPUTED_SIZE);
没有我希望的结果。
然后我尝试自己计算所需的高度,但我找不到任何方法来确定各行的高度。在自定义TableCell的update方法中调用this.getTableRow().getHeight()
将导致NullPointerExceptions。当检查为null时,它仍将返回0!
TableRow<T> tr = this.getTableRow();
if (tr != null) {
System.out.println(tr.getHeight());
}
非常沮丧,我决定通过调用来修正行高
table.setFixedCellSize(20);
这严重限制了自定义TableCells的重点,但我没有取得任何进展。但是,表高度也不等于行数乘以固定的行高,因为需要考虑表头。我无法访问表格标题或要求表格标题大小/高度。
你有什么建议我出错了或者我忽略了什么来实现我的原始目标(拥有一个像显示每一行所需的那么大的ListCell,但不是一个空行吗?)任何帮助/想法将是最受欢迎的!谢谢!
答案 0 :(得分:1)
使用Bindings(示例有一个至少有2行的表视图,或者表中列表中所有项的大小...
/**
* Helper to set table height based on content
*
* @param table - the table in context
* @param rowHeight - the height of a single row, alternatively could use table.fixedCellSizeProperty()
* @param headerHeight - the height of the table header
* @param margin - a value for the margins
*/
public void tableHeightHelper(TableView<?> table, int rowHeight, int headerHeight, int margin) {
table.prefHeightProperty().bind(Bindings.max(2, Bindings.size(table.getItems()))
.multiply(rowHeight)
.add(headerHeight)
.add(margin));
table.minHeightProperty().bind(table.prefHeightProperty());
table.maxHeightProperty().bind(table.prefHeightProperty());
}
在提供表格的列表上有一个监听器或订阅,表格大小将始终调整为项目
这实际上取决于你如何自定义列表视图的单元格,以及你如何配置单元工厂......只要ListView中的fixedCellProperty()没有设置,我就是& #39;在ListView中的单个单元格存在问题,调整到它们包含的节点的大小。
答案 1 :(得分:-2)
看看:
tableView.setColumnResizePolicy(..);
也许这可以帮到你