Ale*_*sky 19 java swing jtable jscrollpane
我目前在JScrollPanes中嵌套了JTables,如下所示:

我的问题是,在创建表时,每个表中的行数是可变的.我想要做的是如果表太短,则使JScrollpane变小,但如果表太长,我想将它保持在设定的大小.
我怎么能做到这一点?
And*_*son 22
Dimension d = table.getPreferredSize();
scrollPane.setPreferredSize(
new Dimension(d.width,table.getRowHeight()*rows+1));
Run Code Online (Sandbox Code Playgroud)
其中,rows表示数据行数或限制.
我setPreferredScrollableViewportSize()在此上下文中使用,后跟pack()或revalidate()根据需要使用.
附录:
你如何使用它?
这是Scrollablein 的实现的一个特征JTable.以下是几个例子.补充getPreferredScrollableViewportSize()也可能是有用的.
以下(当前接受的)代码没有考虑外观的各个方面:
Dimension d = table.getPreferredSize();
scrollPane.setPreferredSize(
new Dimension( d.width, table.getRowHeight() * (rows+1) ));
Run Code Online (Sandbox Code Playgroud)
table.getRowHeight()高度不一定是像素。(在“金属”L&F 中,它更高)scrollPane会将表格挤压得小于其首选大小。rows行都可见。应改用以下代码:
table.setPreferredScrollableViewportSize(
new Dimension(
table.getPreferredSize().width,
table.getRowHeight() * visible_rows));
Run Code Online (Sandbox Code Playgroud)
该scrollPane会要求表的首选大小,并添加到页眉和滚动条任何额外的空间。
下面显示了 aJTable与 4 行的差异,当visible_rows从 减少4到 时3。的首选宽度JScrollPane会自动填充以包含滚动条,而不是压缩表格列。还要注意标题的空间(不同于行高)也是自动提供的;它不包括在visible_rows计数中。