为什么水平滚动条永远不会出现在 JTable 上?

Why does the horizontal scrollbar never show up on JTable?

一图胜千言:

我在 JScrollPane 中有 JTable,目前 table 有 10 列。每列都有一个最小宽度(由 setMinWidth(...) 给出)。

第一张图片: 当 JFrame 被拉伸超过所有列的所有最小宽度的总和时,列被拉伸以填充 window:这个是期望的效果(不要在框架的最右侧留空 space)。

第二张图片: 但是当 JFrame 设置的尺寸小于此组合最小尺寸时,水平条无法正确显示并且无法查看远处右列。目前我有 JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS 作为水平条选项,因此为什么对于两张图片都有水平条容器(适当的名称?),但实际的条本身从未出现。如果我有 JScrollPane.HORIZONTAL_SCROLLBAR_OFF,水平条容器永远不会显示。

顺便说一句,垂直效果很好。

我尝试了很多方法,包括禁用自动调整大小,并尝试在 JScrollPane 宽度超过列的最小宽度总和时自行设置列宽。我必须自己手动执行此操作似乎不对。如果需要,我可以提供我的代码,但我认为没有必要,因为它只是一个托管 JTable 的 JScrollPane。

解决方案是覆盖 getScrollableTracksViewportWidth() 方法:

@Override
public boolean getScrollableTracksViewportWidth() {
  return (getPreferredSize().width < getParent().getWidth());
}