Java的FlowLayout没有正确调整大小

问题描述:

我创建了一个JFrame,其初始化为BorderLayoutJScrollPane作为其CENTER元素。Java的FlowLayout没有正确调整大小

滚动窗格设置为VERTICAL_SCROLLBAR_ALWAYSHORIZONTAL_SCROLLBAR_NEVER策略。我的frame的目的是为了控制宽度,而高度应该随着数据的添加/删除而增大/缩小。

里面我scroll pane,我添加了一个简单的JPanel(可以称之为内容面板),它与FlowLayout(和LEADING政策)初始化。

为了测试这一点,我只需将我的content panel填充为20 JLabel("Item " + n)组件,其中n是循环计数器。

如果frame足够大,并且我收缩宽度时将标签换行到其他行,我期望看到我的labels显示在单行上。但是,相反,只有一行显示没有包装......曾经。

有没有人知道为什么flow layout不涉及scroll pane涉及?

如果我删除scroll pane一起,直接就把content panelframe,发生所期望的效果的包装,但如果frame高度收缩比content panel高度,它只是消失较小。

想法是我希望我的labels在必要时被包装,但如果意味着必须向上/向下滚动,则始终可见。

有关如何解决此问题的任何建议?

谢谢。

Wrap Layout给出了解释和解决方案。

+0

它似乎到目前为止根据需要/预期工作!让我们希望Oracle比Sun更愿意投资Swing!多谢camickr! – Jeach 2010-08-03 06:04:17

+0

你会说FlowLayout有缺陷吗?或者你认为这是Sun的意图吗? WrapLayout使得它更应该成为Swing的一部分! – Jeach 2010-08-03 06:13:21

+0

它不是一个错误,因为没有试图动态重新计算首选大小的代码。它只是有人设计它的工作方式。 – camickr 2010-08-03 14:38:01

如果您使用desingner,则必须将preferredredSize属性设置为null(删除设置的内容),然后通过单击preferredredsize属性名称旁边的三点[...]按钮设置首选大小,然后放置您的首选价值。

我遇到了同样的问题,它适用于我