【发布时间】:2015-02-13 15:21:47
【问题描述】:
我正在编写一个简单的 Questionare 应用程序。我在自定义 javaFX 组件(代表一个问题)中使用 TableView,它用作 ListView 中的 ListCell(用于代表整个问卷)。
我想要什么:每个 ListCell 使用尽可能少的空间(或必要的),同时仍然显示其全部内容。
会发生什么:TableView 似乎默认为标准大小。如果 Table 有更多内容,它会在 ScrollPane 中显示其内容。如果 TableView 的内容较少,它会用空白空间填充自己。
我尝试通过多种方式解决我的问题:
最初我认为一定有办法停用滚动条。但我找不到任何方法。
然后我尝试通过更改 PreferredSizeProperty 来更改表格的大小:
table.setPrefHeight()但我找不到任何关于桌子有多大的信息。table.setPrefHeight(USE_COMPUTED_SIZE);没有得到我想要的结果。然后我尝试自己计算必要的高度,但我找不到任何方法来确定各个行的高度。在自定义 TableCell 的更新方法中调用
this.getTableRow().getHeight()将导致 NullPointerExceptions。当检查 null 时,它仍然会返回 0!TableRow<T> tr = this.getTableRow(); if (tr != null) { System.out.println(tr.getHeight()); }非常沮丧,我决定通过调用来修复行高
table.setFixedCellSize(20);这严重限制了自定义 TableCells 的点,但我没有取得任何进展。但是,表格高度也不等于行数乘以固定的行高,因为需要考虑表格标题。而且我无法访问表格标题或询问表格标题的大小/高度。
您对我出错的地方有什么建议,或者我为实现最初的目标而忽略了什么(有一个非常大的 ListCell 来显示表格的每一行,但不是一个空行?)任何帮助/想法都将受到欢迎!谢谢!
【问题讨论】:
-
所以你已经把这个挤在一起了:ListView -> ListCell -> TableView?这在很多层面上都是错误的。我不知道从哪里开始。我强烈建议您使用不同的组件重写 UI。 ListView 和 TableView 都旨在显示大量数据,从而以虚拟化的方式布局其子项(单元格)。这并不意味着将包含 TableView 的单个问题显示为 ListCell 图形。
-
一个问题被一个使用 TableView 作为子组件的自定义组件压制。每个问题本身就是一个 ListCell,要显示在 ListView 中。就我而言,TableView 并不大:它可能包含 1 到 10 行的任何内容。我同意:就一行而言,这似乎毫无意义,但如果需要几行,我还没有看到它有什么问题。
-
您想要做的事情将非常困难(如果可能的话)。
TableView不应该用于布局,这实际上是您在这里尝试做的。您是否真的需要表格视图的任何功能(可调整大小的列、可拖动的列、标题单击排序等)?如果不是,最好使用布局窗格(例如GridPane)来显示单元格而不是TableView。 -
如果不可能,显然我必须使用另一种解决方案。但是,我要求用户提供列表,例如对于多个日期:“列出您之前 5 次约会的日期”或“列出您之前居住超过一个月的所有地址以及您在那里居住的时间”。而且我认为输入此类数据的表格将是一个非常明显的选择。
标签: java listview javafx tableview tablecell