Java 将JScroll窗格收缩到与JTable相同的高度
我目前在JScrollPane中嵌套了JTables,如下所示: 我的问题是,创建表时,每个表中的行数是可变的。我想做的是,如果表太短,将JScrollpane变小;如果表太长,则将其保持在设定的大小Java 将JScroll窗格收缩到与JTable相同的高度,java,swing,jtable,jscrollpane,Java,Swing,Jtable,Jscrollpane,我目前在JScrollPane中嵌套了JTables,如下所示: 我的问题是,创建表时,每个表中的行数是可变的。我想做的是,如果表太短,将JScrollpane变小;如果表太长,则将其保持在设定的大小 如何实现这一点?使用GridBagLayout管理器,并将JScrollPane的最大大小设置为您想要的大小。如果表更大,JSCROL将不会超过该大小 然后,添加一个粘合组件(我认为它类似于BoxLayout.createVerticalGlue或类似的东西),它是一个只占用剩余空间的空组件 因
如何实现这一点?使用GridBagLayout管理器,并将JScrollPane的最大大小设置为您想要的大小。如果表更大,JSCROL将不会超过该大小 然后,添加一个粘合组件(我认为它类似于BoxLayout.createVerticalGlue或类似的东西),它是一个只占用剩余空间的空组件 因此,当表较小时,此组件将占用剩余空间,如果表较大,则不会占用任何空间,因为JScrollPane正在使用它 我在此上下文中使用,然后根据需要使用
pack()
或revalidate()
增编:
你如何使用它
这是在JTable
中实现的一个特性。这里有几个。互补的getPreferredScrollableViewportSize()
也可能有用
Dimension d = table.getPreferredSize();
scrollPane.setPreferredSize(
new Dimension(d.width,table.getRowHeight()*rows+1));
其中,
rows
表示数据行数或限制。如果使用MigLayout,在添加包含JTable的滚动窗格时,可以指定约束growx
,而不是grow
,使其仅水平拉伸
现在,滚动窗格位于其父的中间。您可以在行中设置约束,使其与行的顶部对齐。或者,在组件约束中:
aligny top
以下(当前接受的)代码不考虑外观的各个方面:
Dimension d = table.getPreferredSize();
scrollPane.setPreferredSize(
new Dimension( d.width, table.getRowHeight() * (rows+1) ));
table.getRowHeight()
像素。(在“金属”L&F中,它更高)滚动窗格
中的垂直滚动条将挤压小于首选大小的表格行都可见
table.setPreferredScrollableViewportSize(
new Dimension(
table.getPreferredSize().width,
table.getRowHeight() * visible_rows));
滚动窗格
将询问表格的首选大小,并为标题和滚动条添加额外的空间
下面显示了当visible\u rows
从4
减少到3
时,具有4行的JTable
的差异。JScrollPane
的首选宽度会自动填充,以包括滚动条,而不是压缩表列。此外,还自动为标题提供空间(与行高不同);它不包括在可见行中
+1用于屏幕提示。如果有图片的话,回答这类问题就容易多了。这不是很有帮助。你怎么使用它?看起来这只会给标题一个像素。高度计算是否可能为table.getRowHeight()*(行+1)?这不考虑L&F的各个方面。如果在滚动窗格中可以看到滚动条,则会将表格列从其首选大小挤压出来。它还假设页眉高度等于行高,但情况并非总是如此。我也有类似的问题,这个解决方案帮助了我,而不是首选的解决方案。