将 JScroll 窗格收缩到与 JTable 相同的高度

2022-09-02 12:29:03

我目前将JTables嵌套在JScrollPanes中,如下所示:

enter image description here

我的问题是,创建表时,每个表中的行数是可变的。我想做的是,如果表太短,JScrollpane变小,但如果表太长,我想让它保持在设定的大小。

我该如何做到这一点?


答案 1
Dimension d = table.getPreferredSize();
scrollPane.setPreferredSize(
    new Dimension(d.width,table.getRowHeight()*rows+1));

其中表示数据的行数或限制。rows


答案 2

以下(当前接受的)代码考虑外观的各个方面:

Dimension d = table.getPreferredSize();
scrollPane.setPreferredSize(
    new Dimension( d.width, table.getRowHeight() * (rows+1) ));
  1. 标题行的高度不一定是像素。(在“金属”L&F中,它更高)table.getRowHeight()
  2. 中的垂直滚动条会将表格挤压得小于其首选大小。scrollPane
  3. 水平滚动条将占用额外的空间,因此并非所有请求的行都可见。rows

应改用以下代码:

table.setPreferredScrollableViewportSize(
    new Dimension(
        table.getPreferredSize().width,
        table.getRowHeight() * visible_rows));

将询问表的首选大小,并为标题和滚动条添加任何额外空间。scrollPane

下面显示了 在 具有 4 行的 a 中的差异,当从 减少到 时。的首选宽度会自动填充以包含滚动条,而不是压缩表列。另请注意,标题的空间(与行高不同)也会自动提供;它不包括在计数中。JTablevisible_rows43JScrollPanevisible_rows

JTable with and without scrollbar


推荐