我目前有类似以下的JTables嵌套在JScrollPanes中:
问题是当每个表格创建时,其中的行数是可变的。我想要做的是,如果表格太短,则将JScrollPane缩小,但如果表格太长,则保持其在固定大小。
我该如何实现这一点?
我目前有类似以下的JTables嵌套在JScrollPanes中:
问题是当每个表格创建时,其中的行数是可变的。我想要做的是,如果表格太短,则将JScrollPane缩小,但如果表格太长,则保持其在固定大小。
我该如何实现这一点?
Dimension d = table.getPreferredSize();
scrollPane.setPreferredSize(
new Dimension(d.width,table.getRowHeight()*rows+1));
这里的 rows
表示数据行数或限制。
scrollPane
中可见滚动条,它将压缩表格列的首选大小。它还假设标题高度等于行高,但这并不总是正确的。 - AJNeufeld以下(目前被接受的)代码没有考虑外观和感觉的各个方面:
Dimension d = table.getPreferredSize();
scrollPane.setPreferredSize(
new Dimension( d.width, table.getRowHeight() * (rows+1) ));
table.getRowHeight()
像素高。(在“Metal” L&F中,它更高)scrollPane
中的垂直滚动条会使表格变小,而不是其首选大小。rows
行。应改用以下代码:
table.setPreferredScrollableViewportSize(
new Dimension(
table.getPreferredSize().width,
table.getRowHeight() * visible_rows));
scrollPane
会请求表格的首选大小,并在此基础上添加标题和滚动条的额外空间。JTable
,当将 visible_rows
从 4
减少到 3
时的差异。自动将 JScrollPane
的首选宽度填充以包括滚动条,而不是压缩表格列。另请注意,标头(与行高不同)的空间也会自动提供;它不包含在 visible_rows
计数中。
setPreferredScrollableViewportSize()
,然后根据需要使用pack()
或revalidate()
。这是在你怎么使用它?
JTable
中实现Scrollable
的一个特性。这里有几个示例。互补的getPreferredScrollableViewportSize()
也可能会有用。growx
而不是grow
,以使其仅水平拉伸。top
。或者,在组件约束中:aligny top
。