【问题标题】:custom Swing components that resize dynamically but interoperate with LayoutManagers动态调整大小但与 LayoutManager 互操作的自定义 Swing 组件
【发布时间】:2011-06-09 15:25:32
【问题描述】:

我有一个子类JPanel,它充当一些信息的视图。

当信息发生变化时,JPanel 的最小/最大/首选大小也可能会发生变化。

如何正确处理此事件,以便它与 LayoutManager 很好地配合?

我尝试覆盖getPreferredSize(),但它似乎只被调用一次。

【问题讨论】:

    标签: java swing layout-manager


    【解决方案1】:

    尝试在更改最小/最大/首选大小后重新验证您的组件。应该可以。

    【讨论】:

    • 酷,谢谢!澄清一下,你的意思是Component.revalidate()download.oracle.com/javase/6/docs/api/javax/swing/…
    • 不,应该只是 revalidate()。您的子类应该具有更改类属性的方法。每当这些属性之一发生可能影响您调用 revalidate() 和 repaint() 的组件的大小时。查看其他 Swing 组件的源代码。说一个 JLabel 并查看 setText() 或 setIcon() 方法,看看它是如何完成的。
    • @camickr:我不明白你的评论。我的回答错了吗?
    • 你不应该使用像 component.setPreferredSize(...), component.revalidate() 这样的代码。相反,您应该重写该类并实现 getPreferredSize() 方法。在上面的例子中,如果你使用 label.setText("abc"),setText() 方法负责调用 revalidate() 方法。你不做 label.setText(...), label.revalidate().
    • @camickr:好吧。现在很清楚了。谢谢你的解释。
    猜你喜欢
    • 2023-03-26
    • 2015-07-23
    • 2011-12-06
    • 1970-01-01
    • 2011-04-29
    • 1970-01-01
    • 2015-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多