我目前在JScrollPanes中嵌套了JTables,如下所示:
我的问题是,在创建表时,每个表中的行数是可变的。我想要做的是如果表太短,则使JScrollpane变小,但如果表太长,我想将它保持在设定的大小。
我该如何做到这一点?
答案 0 :(得分:19)
Dimension d = table.getPreferredSize();
scrollPane.setPreferredSize(
new Dimension(d.width,table.getRowHeight()*rows+1));
其中rows
表示数据行数或限制。
答案 1 :(得分:6)
我在此上下文中使用setPreferredScrollableViewportSize()
,然后根据需要使用pack()
或revalidate()
。
附录:
你如何使用它?
这是JTable
中Scrollable
的实施功能。这里有几个examples。补充getPreferredScrollableViewportSize()
也可能有用。
答案 2 :(得分:2)
使用GridBagLayout管理器并将JScrollPane的最大大小设置为您想要的任何值。如果表格较大,则JScroll不会超出该大小。
然后,添加一个胶水组件(我认为它类似于BoxLayout.createVerticalGlue或类似的东西),这是一个空组件,只占用剩余空间。
因此,当表格较小时,此组件将占用剩余空间,如果表格较大,则自JScrollPane使用它以后不会采取任何操作。
答案 3 :(得分:1)
以下(目前接受的)代码确实不考虑了外观的各个方面:
Dimension d = table.getPreferredSize();
scrollPane.setPreferredSize(
new Dimension( d.width, table.getRowHeight() * (rows+1) ));
table.getRowHeight()
像素。 (在“金属”L& F中,它更高)scrollPane
中的垂直滚动条会使表格小于其首选尺寸。rows
行都可见。应该使用以下代码:
table.setPreferredScrollableViewportSize(
new Dimension(
table.getPreferredSize().width,
table.getRowHeight() * visible_rows));
scrollPane
将询问表格的首选大小,并为标题和滚动条增加任何额外空间。
下面显示了当JTable
从visible_rows
减少到4
时,3
与4行的差异。 JScrollPane
的首选宽度会自动填充以包含滚动条,而不是压缩表格列。还要注意标题的空间(与行高不同)也是自动提供的;它未包含在visible_rows
计数中。
答案 4 :(得分:0)
如果使用MigLayout,则在添加包含JTable的滚动窗格时,可以指定约束growx
而不是grow
,以使其仅水平拉伸。
现在,滚动窗格位于其父级的中间。您可以在行约束中设置它以使其与行的top
对齐。或者,在组件约束中:aligny top
。