我正在编写一个简单的问卷应用程序。我正在使用TableView作为自定义JavaFX组件(代表一个问题)内的ListView中的ListCell。
我的要求是:每个ListCell在显示其全部内容的同时尽可能占用最少的空间。
但实际情况是:TableView似乎默认了标准大小。如果Table有更多的内容,它会在ScrollPane内显示其内容。如果TableView没有足够的内容,它会填充自己的空白处。
我试图以多种方式解决这个问题:
1. 最初我认为一定有一种方法可以停用滚动条。但我找不到任何方法来实现它。
2. 然后我尝试通过更改PreferredSizeProperty来改变表格的大小: table.setPrefHeight() 但我无法找到任何有关表格大小的信息。 table.setPrefHeight(USE_COMPUTED_SIZE)并没有带来我所期望的结果。
3. 接着我试图自己计算必要的高度,但我无法找到确定行高度的方法。在自定义TableCell的update方法中调用this.getTableRow().getHeight()会导致NullPointerExceptions。即使检查null,它也仍然返回0! TableRow tr = this.getTableRow(); if (tr != null) { System.out.println(tr.getHeight()); }
4. 非常沮丧的是,我决定通过调用table.setFixedCellSize(20)来固定行高。这严重限制了自定义TableCell的用途,但我无法以其他方式取得任何进展。然而,表格的高度也不等于行数乘以固定行高,因为必须考虑表头。我无法访问表头或询问表头大小/高度。
你有什么建议吗?或者告诉我在实现我的最初目标(拥有一个ListCell,它恰好占用足够的空间来显示表格的每一行,但不会留下任何空行)时遗漏了哪些内容或者做错了什么?任何帮助/想法都将不胜感激!谢谢!
我的要求是:每个ListCell在显示其全部内容的同时尽可能占用最少的空间。
但实际情况是:TableView似乎默认了标准大小。如果Table有更多的内容,它会在ScrollPane内显示其内容。如果TableView没有足够的内容,它会填充自己的空白处。
我试图以多种方式解决这个问题:
1. 最初我认为一定有一种方法可以停用滚动条。但我找不到任何方法来实现它。
2. 然后我尝试通过更改PreferredSizeProperty来改变表格的大小: table.setPrefHeight() 但我无法找到任何有关表格大小的信息。 table.setPrefHeight(USE_COMPUTED_SIZE)并没有带来我所期望的结果。
3. 接着我试图自己计算必要的高度,但我无法找到确定行高度的方法。在自定义TableCell的update方法中调用this.getTableRow().getHeight()会导致NullPointerExceptions。即使检查null,它也仍然返回0! TableRow tr = this.getTableRow(); if (tr != null) { System.out.println(tr.getHeight()); }
4. 非常沮丧的是,我决定通过调用table.setFixedCellSize(20)来固定行高。这严重限制了自定义TableCell的用途,但我无法以其他方式取得任何进展。然而,表格的高度也不等于行数乘以固定行高,因为必须考虑表头。我无法访问表头或询问表头大小/高度。
你有什么建议吗?或者告诉我在实现我的最初目标(拥有一个ListCell,它恰好占用足够的空间来显示表格的每一行,但不会留下任何空行)时遗漏了哪些内容或者做错了什么?任何帮助/想法都将不胜感激!谢谢!
TableView
不应该用于布局,这实际上是你在尝试做的事情。你是否真正需要表格视图的任何功能(可调整大小的列、可拖动的列、单击标题进行排序等)?如果不需要,最好使用布局面板(例如GridPane
)来显示单元格,而不是使用TableView
。 - James_D