【问题标题】:Getting correct sizing behaviour in a custom Swing component在自定义 Swing 组件中获得正确的大小调整行为
【发布时间】:2010-07-16 12:01:04
【问题描述】:

我正在创建一个继承自 JPanel 的自定义 Swing 组件。

为了获得“良好行为”,覆盖/实施各种调整方法(getPreferredSize、setPreferredSize、getMinimumSize 等)的正确方法是什么,尤其是在以下方面:

  • 使用不同的布局管理器
  • 调用 setPreferredSize() 时行为正确
  • 通过 setBorder() 设置边框时做出适当反应

【问题讨论】:

    标签: java user-interface swing layout custom-controls


    【解决方案1】:

    不要从JPanel 继承,除非您的组件是多个子组件的组合。在大多数情况下,从JComponent 继承就足够了。

    就调整大小而言...覆盖 getPreferredSizegetMinimumSizegetMaximumSize 方法以在布局管理器中获得适当的行为

    如果您的组件是子组件的组合,在大多数情况下,首选大小已经由您的子组件组合定义,因此您不必覆盖这个。

    【讨论】:

    • 谢谢!看起来在某些情况下我可以直接从 JComponent 继承,在其他情况下我确实有一个复合材料,所以需要 JPanel。是否有关于如何实现 getPreferedSize、getMinimumSize 等的指南?主要原因是这些和 setPreferredSize、setBorder 等之间的交互看起来可能非常复杂.....
    • 这就是 JComponent API 所说的:“如果 preferredSize 已设置为非空值,则返回它。如果 UI 委托的 getPreferredSize 方法返回非空值,则返回该值;否则推迟组件的布局管理器”。但IMO非常依赖LAF。所以我建议在你的 UI 委托中实现尺寸,然后委托给 UI 代表 :) 就边框而言,所有 3 种尺寸都应该包括边框尺寸,所以你不必担心。
    • 这是 Kirrill 写的关于自定义组件的一篇非常好的文章:today.java.net/article/2007/02/19/…
    【解决方案2】:

    虽然很烦人:在这种情况下,这取决于布局管理器。通常布局管理器最好与约束一起使用以获得良好的布局。 我使用过 GridBagLayout,在习惯它之后,我发现它对每个组件使用正确的 GridBagConstraint 效果很好。 有时一位优秀的视觉 ui 设计师也可以提供帮助,例如来自 Netbeans 的设计师,或者您可以考虑像 Swing DesignerJFormDesigner 这样的付费设计师。可以为您节省一些摆弄像素的时间。

    【讨论】:

    • 酷,感谢您的信息!我还发现 MigLayout 在这方面非常有用.....
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-29
    • 1970-01-01
    • 1970-01-01
    • 2012-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多