2014-03-12 60 views
2

我有一个JPanel里面的JScrollPane它嵌套在一些其他容器内。我的JPanel使用来自SO用户jxdthis question的修改FlowLayout。JScrollPane中的JPanel扩展包

这可以是信息矫枉过正,但所讨论的面板的全部嵌套如下:

的JPanel(ModifiedFlowLayout)> JScrollPane的>的JPanel(GridBagLayout的)> JTabbedPane中>的JPanel(GridBagLayout的)>调整JSplitPane>的JPanel(BorderLayout的)> JFrame。

问题是,当我在我的JFrame上调用pack()时,JScrollPane/JPanel水平扩展以填充整个剩余的屏幕空间(跨多个显示器)。所使用的空间远远超过显示JPanel中所有组件所需的空间。我尝试在我的JPanel上使用setMaximumSize(),但在这种情况下它似乎被忽略。

理想情况下,我希望面板在调整围绕它的组件的大小后留下空间。可以/如何做到这一点?

+0

你试过重写getPreferredSize()吗? – nachokk

+0

@nachokk嗯,我会被诅咒。我认为最大尺寸将是比首选尺寸更重要的因素,但设置似乎阻止了扩展,尽管它已导致ModifiedFlowLayout开始表现不当,但这可能是一个不同的问题。我也没有覆盖它,因为我只使用JPanel而不是扩展它。我使用'setPreferedSize()'来代替。 – Fr33dan

+0

[我应该避免在Java Swing中使用set(Preferred | Maximum | Minimum)Size方法吗?](http://stackoverflow.com/questions/7229226/should-i-avoid-the-use-of-setpreferredmaximumminimumsize-方法在java的swi) – nachokk

回答

0

FlowLayout的首选大小将尝试显示单个行上的所有组件。我不知道ModifiedFlowLayout是如何工作的,但您可以查看Wrap Layout,它可以做同样的事情。

但是,当使用时,您可以使用setSize(...)方法来建议初始宽度应该是多少。组件的初始包装应该基于这个尺寸。

+0

我试过了,它似乎WrapLayout和ModifiedFlowLayout具有相同的行为。 @ nachokk对使用首选大小而不是最大大小的评论证明是解决问题的手段,但他没有将其作为答案发布,因此我无法对其进行标记。 – Fr33dan

+0

@ Fr33dan,你不应该使用setPreferredSize()。如果用户调整了框架的大小,布局将不会动态改变。 – camickr

+0

如果我在我的JPanel上使用'setPreferredSize()',如果直接对我的JScrollPane执行,那么它就是这样。 – Fr33dan