java - 如何将 javafx TableView 大小限制为必要的大小?

标签 java listview javafx tableview tablecell

我正在编写一个简单的问卷应用程序。我在自定义 javaFX 组件(代表一个问题)内使用 TableView,它用作 ListView 内的 ListCell(用于代表整个问卷)。

我想要的:每个 ListCell 使用尽可能少的空间(或必要的),同时仍然显示其全部内容。

发生了什么:TableView 似乎默认为标准大小。如果 Table 有更多内容,它会在 ScrollPane 中显示其内容。如果 TableView 的内容较少,它会用空白空间填充自己。


我尝试通过多种方式解决我的问题:

  1. 最初我假设一定有办法停用滚动条。但我找不到任何方法来做到这一点。

  2. 然后我尝试通过更改 PreferredSizeProperty 来更改表的大小: table.setPrefHeight() 但是我找不到关于 table 有多大的任何信息。 table.setPrefHeight(USE_COMPUTED_SIZE); 没有得到我希望的结果。

  3. 然后我尝试自己计算必要的高度,但找不到任何方法来确定各行的高度。打电话this.getTableRow().getHeight()在自定义 TableCell 的更新方法中将导致 NullPointerExceptions。当检查 null 时,它仍然会返回 0! TableRow<T> tr = this.getTableRow(); if (tr != null) { System.out.println(tr.getHeight()); }

  4. 非常沮丧,我决定通过调用来修复行高 table.setFixedCellSize(20); 这严重限制了自定义 TableCells 的意义,但除此之外我没有取得任何进展。但是,表格高度也不等于行数乘以固定行高,因为需要考虑表格标题。而且我无法访问表格标题或询问表格标题大小/高度。

您对我出错的地方或我忽略了什么以实现我最初的目标有什么建议吗(有一个 ListCell 的大小足以显示表格的每一行,但不是一个空行?)欢迎任何帮助/想法!谢谢!

最佳答案

使用绑定(bind)(示例有一个至少有 2 行的 TableView ,或者一个列表中所有项目大小的表...

/**
 * 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 自定义单元格,以及您如何配置单元格工厂...只要 ListView 中的 fixedCellProperty() 未设置,我就没有ListView 中的单个单元格会根据它们包含的节点的大小进行调整。

关于java - 如何将 javafx TableView 大小限制为必要的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27485588/

相关文章:

java - 我想将 Facebook 帖子从公共(public)页面提取到 Java 应用程序

java - 类 'Anonymous class derived from PlaceSelectedListener' 必须声明为抽象或实现抽象方法

android - listView 显示所有数据,而不仅仅是我指定的数据

android - 使用 simpleCursorAdapter - requery() 插入新记录后更新 ListView

java - 如何在 javafx WebView 中指定默认字体与默认 UI 字体相同

java - 如何创建多级组合绑定(bind)?

java - 奇怪的 Java FXML NumberFormatException?

java - 如何在java中的构造函数中分配通用枚举?

java - 如何将Spring框架和MySQL与Java swing应用程序结合起来?

java - StringWithTag 标签值