【问题标题】:Shrink JScroll Pane to same Height as JTable将 JScroll 窗格缩小到与 JTable 相同的高度
【发布时间】:2011-06-29 16:24:58
【问题描述】:

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

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

我怎样才能做到这一点?

【问题讨论】:

  • +1 为屏幕截图。如果有图片,回答这类问题会容易得多。

标签: java swing jtable jscrollpane


【解决方案1】:
Dimension d = table.getPreferredSize();
scrollPane.setPreferredSize(
    new Dimension(d.width,table.getRowHeight()*rows+1));

其中rows代表数据的行数,也就是限制。

【讨论】:

  • 似乎这只会为标题提供 1 个像素。高度计算是否可能是 table.getRowHeight() * (rows+1) ?
  • 这没有考虑到 L&F 的各个方面。如果滚动条在scrollPane 中可见,它将从首选大小压缩表格列。它还假设标题高度等于行高,但情况并非总是如此。
【解决方案2】:

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

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

应使用以下代码:

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

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

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

【讨论】:

  • 我遇到了类似的问题,这个解决方案帮助了我,而不是首选的解决方案。
【解决方案3】:

我在此上下文中使用setPreferredScrollableViewportSize(),然后根据需要使用pack()revalidate()

附录:

你如何使用它?

这是ScrollableJTable 中实现的一个特性。这里有几个examples。补充的getPreferredScrollableViewportSize() 也可能有用。

【讨论】:

  • 这不是很有帮助。你是怎么用的?
【解决方案4】:

使用 GridBagLayout 管理器并将 JScrollPane 的最大大小设置为您想要的任何值。如果表较大,JScroll 不会超过该大小。

然后,添加一个胶水组件(我认为它类似于 BoxLayout.createVerticalGlue 或类似的东西),它是一个只占用剩余空间的空组件。

因此,当表格较小时,该组件将占用剩余空间,如果表格较大,则不会占用任何空间,因为 JScrollPane 正在使用它。

【讨论】:

    【解决方案5】:

    如果使用 MigLayout,在添加包含 JTable 的滚动窗格时,可以指定约束 growx 而不是 grow,使其仅水平拉伸。

    现在滚动窗格位于其父级的中间。您可以在行约束中设置以使其与行的top 对齐。或者,在组件约束中:aligny top

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多