【发布时间】:2014-03-12 15:50:54
【问题描述】:
我在 JScrollPane 内有一个 JPanel,它嵌套在其他一些容器中。我的 JPanel 在 this question 中使用来自 SO 用户 jxd 的修改后的 FlowLayout。
这可能是信息过度杀伤,但相关面板的完整嵌套如下:
JPanel (ModifiedFlowLayout) > JScrollPane > JPanel (GridBagLayout) > JTabbedPane > JPanel (GridBagLayout) > JSplitPane > JPanel (BorderLayout) > JFrame。
问题是,当我在 JFrame 上调用 pack() 时,JScrollPane/JPanel 会水平扩展以填充整个剩余的屏幕空间(跨多个监视器)。使用的空间超过了显示 JPanel 中所有组件所需的空间。我尝试在我的 JPanel 上使用 setMaximumSize(),但在这种情况下它似乎被忽略了。
理想情况下,我希望面板的大小由围绕它的组件调整大小后剩余的空间决定。可以/如何做到这一点?
【问题讨论】:
-
你尝试过覆盖
getPreferredSize()吗? -
@nachokk 好吧,我会被诅咒的。我认为最大尺寸将是比首选尺寸更重要的因素,但设置似乎阻止了扩展,尽管它导致 ModifiedFlowLayout 开始表现不正确,但这可能是一个不同的问题。我也没有覆盖它,因为我只使用了 JPanel 没有扩展它。我改用
setPreferedSize()。 -
@nachokk 有趣的发现现在面板仍然很大(考虑到我使用了
HORIZONTAL_SCROLLBAR_NEVER,这并不容易看到)并且大部分是空的,但打包时它不会扩展整个框架。
标签: java swing jscrollpane