【问题标题】:Java's FlowLayout does not resize correctlyJava 的 FlowLayout 无法正确调整大小
【发布时间】:2011-03-24 13:15:07
【问题描述】:

我创建了一个JFrame,并使用BorderLayoutJScrollPane 作为其CENTER 元素进行了初始化。

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

在我的scroll pane 中,我添加了一个简单的JPanel(我们称之为内容面板),它使用FlowLayout(和LEADING 策略)进行初始化。

为了对此进行测试,我只需用 20 个JLabel("Item " + n) 组件填充我的content panel,其中n 是循环计数器。

如果frame 足够大并且当我缩小宽度时标签会换行到其他行,我希望看到我的labels 显示在一行上。但取而代之的是,只显示了一行,没有换行……永远。

有谁知道为什么flow layout 在涉及scroll pane 时不换行?

如果我将scroll pane 全部删除并将content panel 直接放在frame 中,则会出现所需的环绕效果,但如果frame 高度缩小到小于content panel 高度,它就会消失.

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

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

谢谢。

【问题讨论】:

    标签: java swing layout


    【解决方案1】:

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

    我遇到了同样的问题,它对我有用

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 到目前为止,它似乎完全按照需要/预期工作!让我们希望 Oracle 在 Swing 上的投资比 Sun 愿意的要多!非常感谢camickr!
      • 您是说 FlowLayout 有错误还是您认为 Sun 的意图是让它以这种方式运行? WrapLayout 更有意义,它应该是 Swing 的一部分!
      • 这不是错误,因为没有代码尝试动态重新计算首选大小。它只是有人设计它的工作方式。
      猜你喜欢
      • 2018-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-14
      • 2019-05-06
      • 1970-01-01
      • 2012-09-27
      相关资源
      最近更新 更多