【问题标题】:how to use the layout managers in swing java如何在 Swing java 中使用布局管理器
【发布时间】:2011-04-29 04:44:06
【问题描述】:

我是 Flow、borders、...等布局管理器的新手 我主要使用setBounds() 来设置组件的位置。

我在一篇文章中读到,使用 setBounds 不是不是一种好的做法,最好使用一些布局。

哪些是最好和最常用的布局?
如何使用布局管理器定位按钮;而不是setbounds(10,10,100,30)?

【问题讨论】:

  • 我建议您查看 MeBigFatGuy 的 Sun 布局教程链接。不过,在了解它们之后,我建议您查看MigLayout。它比一些标准布局管理器更直观(在我看来)。
  • 使用布局管理器的重点是你不需要专门设置组件大小的位置。因此,您必须停止考虑绝对位置和大小并布局您的 GUI,以便随着用户调整框架等大小而动态改变。而且您永远不会只使用一个布局管理器。您可以根据需要使用不同的布局管理器。所以你需要学习每个标准布局管理器的基础知识。

标签: java swing layout


【解决方案1】:

看这里:http://download.oracle.com/javase/tutorial/uiswing/layout/using.html

基本上你应该忘记坐标。在更高级别的设计中查看您的对话框。你应该问自己的问题。

1) 在您的设计中,是否有一个周边区域较小的“主要”区域。如果是这样,请使用 BorderLayout。

2) 在您的设计中是否有类似网格的区域,如果有,请使用 GridLayout。

3) 如果您需要自上而下或左右布局,请考虑使用 BoxLayout

4) 如果你想展示一个复杂的表单,可能使用 jgoodies 的 FormLayout。

但你必须从高层次上看问题。对话框的任何一个顶级部分中都可能有子部分。如果是这种情况,那么您需要在该部分中放置一个 JPanel,然后在该 JPanel 中使用子布局。针对该面板再次使用上述问题。

【讨论】:

  • +1,教程是回答这个问题的最佳方式。发布者知道需要花时间与每个布局管理器一起阅读和玩耍,以了解他们的长处和短处。
  • +1 用于提及“子布局”。我不会制作太多(非平凡的)仅依赖于一种布局的 GUI。
【解决方案2】:

除了“标准”Swing 布局(JDK 的一部分)之外,还有许多第三方(大部分是开源的)LayoutManagers,通常比 Swing 更好。

要在一个真实示例(带代码)上比较许多 LayoutManagers,请查看this link,虽然有点旧,但它仍然显示了当今主要 LayoutManagers 的各种功能和易用性。

一般来说,我会推荐DesignGridLayout,它虽然非常强大,但非常易于使用(您不需要使用 GUI 设计器,并且很容易维护现有面板的布局代码);只需一小时即可理解。

另外,MigLayout 被认为是最灵活的一种(如果您需要非常复杂的布局,可能会很有用),但需要更多时间来适应它,有时您必须使用“技巧”来制作它随心所欲地工作。

【讨论】:

  • 另一个偏好将是一个很大的惊喜:-)
  • 当然,我通常吃自己的狗粮;-)
【解决方案3】:

..这是最好和最常用的布局(?)

嵌套布局。使用最适合不同 GUI 组件组的布局,然后将它们放在其他面板内的面板中(使用其他布局)。有关演示,请参阅此 Nested Layout Example。组合布局。

至于使用哪些最佳个人布局,请阅读 MBFG 链接的教程,了解每个布局可以实现的目标、优势和劣势。

我通常会使用BorderLayout、GridLayout 和FlowLayout 的嵌套组合,偶尔也会使用GridBagLayout。

【讨论】:

  • 过去我经常使用嵌套布局,但这样做的一个主要问题是您无法在 2 个不同的布局中保持一致的大小和组件对齐方式。这就是为什么现在我更喜欢“每个窗口一个布局(即一个面板)”的成语。但这需要使用强大的布局管理器(例如 GridBagLayout、GroupLayout 或更好的、DesignGridLayout 和 MigLayout)。
  • same (as @jfpoilpret) here - 在 FormLayout 诞生之前一直是嵌套倡导者,之后仅用于极其简单的贯穿代码。您可以使用它一段时间(正如您反复展示的那样),但有一点需要付出太多努力才能实现最简单的对齐。当然是我的 2(欧元)美分
  • +1 选择正确的布局管理器绝对是一门艺术。我发现大多数时候嵌套布局就足够了,其余的使用 GUI 设计器的GroupLayout。作为一个具体的example,这种常见的标签/文本布局可以用嵌套布局来完成,但用MigLayout、GroupLayout等就容易多了。
猜你喜欢
  • 2011-06-11
  • 2010-10-07
  • 1970-01-01
  • 2016-02-08
  • 2011-09-13
  • 1970-01-01
  • 2010-10-02
  • 1970-01-01
相关资源
最近更新 更多