4

我只需要在我到达这里之前编写的应用程序中添加一个复选框,这比它必须的要困难得多,因为该应用程序使用了一些第三方 LayoutManager 来尝试进行伪绝对的、类似网格的定位。API 很糟糕,它需要位置指定字符串,这些字符串是逗号分隔的两个、四个或六个参数列表(我仍然不知道为什么会有所不同),我宁愿让 LayoutManager 处理很多这样无论如何,繁重的工作。我一直觉得让 Swing 自己定位事物会导致比我能产生的任何东西更好的组织。我对 CGI 应用程序也有同样的感觉,除了偶尔将复选框或单选框与表格分组之外,我几乎只是让浏览器按照用户想要的方式流动和包装。

Swing 中包含的 LayoutManager 实现是否足够,或者是否真的有必要结合这种绝对控制来强制布局完全符合您的要求(并为您提供一百万个更多的决定)?

4

9 回答 9

6

这种情况正在好转很多。我想说三种最常见的非标准布局管理器是:

  • JGoodies 表单布局
  • 表格布局
  • MigLayout

最后两个非常相似,但 MigLayout 出现得稍晚一些,将来会成为 JDK 的一部分。我想说这三个中的任何一个都有足够的“标准”来相当舒适地使用,但是 MigLayout 现在很可能会胜出,因为它是 Swing 本身的一部分。

所以目前,我会说不。一旦 MigLayout 在 JDK 中,是的。

于 2008-11-25T21:00:11.523 回答
4

个人认为,Java 布局管理概念是自切片面包以来最酷的东西;对于可调整大小的窗口至关重要 - 只需查看 Windows 中所有不可调整大小的窗口,就表明拥有抽象布局管理器是个好主意。

也就是说,Java 中的布局管理器已经足够了,但是需要大量的嵌套才能到达您需要的位置。这种嵌套使改变事情变得很麻烦。将 BoxLayout 和 BorderLayout 视为您的主要内容;仅将 GridBagLayout 用作最后的手段。

您最好的选择是合并一个体面的面向表格的布局,以尽量减少嵌套;其他人已经提出了几个,所以我不会重复。我推出了自己的,因为我想要基于字符串的约束和很小的占用空间,但除此之外,我对 TableLayout 很感兴趣;如果分发大小不是问题,您绝对必须查看 jGoodies 提供的小部件和布局(我认为是免费的,但可能仅用于非商业用途??)

我通常对窗口使用表格布局,并且最终只嵌套有时并且通常只有一层深度用于运行相关组件,例如三个框用于电话号码,由两个标签隔开,用于中间的破折号。我发现我的窗户是高度可维护的,并且很容易添加和更改它们。

PS:避免任何像瘟疫一样的绝对定位

于 2008-11-25T22:34:48.820 回答
3

Swing 的布局管理器通常足以完成您想做的任何事情。在“最糟糕”的情况下,您将不得不使用完整的 GridBagLayout 并使用坐标自行定位每个组件。从您的问题来看,听起来您的公司已经通过允许您使用一些奇怪的输入方案添加组件来编写封面。我通常建议不要创建新的布局管理器,除非你能真正解释没有一个内置管理器可以做你需要做的事情,也不能轻松地加入它们来做你需要做的事情。

于 2008-11-25T20:59:50.430 回答
3

根据我的经验,它们足以让您准备好做一些嵌套(在某些情况下很多嵌套!)

无论哪种方式,我总是发现布局管理器比它们的价值更麻烦。

于 2008-11-25T21:01:13.003 回答
1

根据您的描述,您可能正在使用 TableLayout。如果是这样,我发现它在很多方面都优于标准布局管理器。如果是 TableLayout,请尝试阅读文档,然后您就会明白为什么有时会有不同数量的定位参数。TableLayout 还允许您以不同的方式设置这些参数,而无需使用字符串。

于 2008-11-26T19:12:05.717 回答
1

我从来都不是 Swing 布局管理器的忠实粉丝,但我是在完成了很多 Motif 之后才来到 Swing 的。我不确定它是什么,但在我看来,Swing 似乎没有能力让嵌套在低处的东西“推出”并迫使高于它的东西大到足以容纳它们。另外,我是 XmForm 的忠实粉丝,在 Swing 中没有什么比这更好的了。

也就是说,在 Swing 中 90% 的时间我都使用一堆嵌套的盒子——通常是垂直盒子中的水平盒子中的垂直盒子。有时我需要更多的控制,我完成了 GridBagLayout 的手册,不寒而栗。

于 2008-11-25T21:00:18.027 回答
0

除了上面提到的 3 个 3rd 方布局管理器之外,您可能还想尝试一下 DesignGridLayout,它虽然不如 MigLayout 强大,但更容易使用,并且很难设计糟糕的表单。

免责声明:我是 DesignGridLayout 的作者之一,但我真的相信这是一个很好的 LayoutManager 与 Swing 默认布局相比,还有其他 3rd-party 布局有点太复杂而无法开始。

于 2008-12-02T06:42:12.503 回答
0

我一直认为 GridBagLayout 是一个非常强大的 LayoutManager。不幸的是,掌握它的学习曲线可能有点太陡了。我的第一份工作不允许我们使用任何 GUI 构建器,所以所有的 GUI 代码都是手写的。我一直觉得这是学习 GridBagLayout 最好的方法,让你自己动手。如今,我又老又懒,主要使用 NetBeans,但我仍然从未觉得需要考虑其他 LayoutManager,因为 GridBagLayout 可以做任何事情。

对我来说,网格也是布局事物的好方法。以这种方式组织布局并根据行和列来考虑它是有意义的。

于 2009-01-06T10:32:26.450 回答
0

我已经有几年没有做过任何 Swing 工作了,但是布局管理器是我在尝试编写网页时最想念的东西之一。我们对 GridBagLayout 做了很多工作,特别是对于更复杂的对话框,一旦掌握了就相对容易使用 - 在编写屏幕时。必须修改 GUI 时总是会感到痛苦,而表面上看起来很简单的事情却需要花费大量时间才能完成。

我被介绍给Abeille,这是一个 GUI 表单设计工具,虽然并不完美,但它可以让您在几分钟内构建出具有专业外观效果的屏幕,尤其是在将它与 JGoodies 结合使用时。它包括一个代码生成器或将输出为二进制格式(我认为它稍后包括 XML),这是我的首选。“构建”屏幕的代码如下所示:

FormPanel panel = new FormPanel( "myDialog.jfrm" );
add(panel);

您可以连接到表单上的控件以供操作侦听器使用,并且在使用 MVC 模式时会产生一些非常干净的视图代码。最大的好处是进行更改时,因为表单可以加载到编辑器中,快速进行更改并保存,而无需更改代码。

(我与Abeille没有任何关系,只是一个大粉丝)

于 2009-01-06T10:47:02.507 回答