java-您建议使用哪种Swing布局?
仅在Java库中就有8个布局管理器,然后还有许多第三方产品。
前几天,我尝试使用SpringLayout并...好吧,它对我来说没有用。 看到我的另一个问题。 所以...如果您要设计一个Swing应用程序,并且想要这样的布局,那么您首选的布局管理器是什么? 有什么有趣/有用的经验可以联系吗?
更新:是的,请确保我知道不同的LM适用于不同的布局。 但是我希望你们中的大多数人在所做的大部分事情中都使用1、2或3,或者您发誓只有一个如此多才多艺,您再也不需要其他任何东西了。 有了足够的响应,我希望看到像钟形曲线的东西,在GridBagLayout或MigLayout上出现一个峰值(例如),并使用(例如)BoxLayout或FlowLayout出现一些散乱的长尾巴。
希望,答复的分布将揭示出人们最常使用的东西“ Get Stuff Done™”的一些趋势。
更新和摘要
好吧,将近两天后,MiGLayout绝对领先! 它的粉丝很高兴得知这种布局即将进入“官方”图书馆。
GroupLayout,FormsLayout和TableLayout相对较新,并且没有太多曝光。 也许其他人会和我一样惊奇地发现他们。
14个解决方案
62 votes
MiGLayout,毫无疑问。 老实说,这是我所知道的唯一的Swing布局管理器。
核心JDK中只有8个布局管理器这一事实表明,Swing的创建者完全不知道他们想做什么。 这并不是要浪费Swing的其余部分-这是一个不错的GUI工具包,除了布局管理器之外。
Joonas Pulakka answered 2020-07-26T01:04:09Z
22 votes
所有这些都结合在一起。 这就是重点。 每个布局管理器都满足不同的要求,并且通过将面板与不同的布局管理器嵌套在一起,您几乎可以实现任何目的。
诸如GridBagLayout和GroupLayout(以及许多第三方的)之类的“在一个面板中完成所有操作”的布局管理器都有其位置,主要是当您需要在布局的不同部分中对齐组件时,但是对于大型布局,通常会导致 陷入巨大的,难以处理的混乱之中。
Michael Borgwardt answered 2020-07-26T01:04:34Z
17 votes
这取决于您要创建哪种GUI。 您可能只使用一种或两种简单的布局,或者可能需要使用更高级的布局。 我的总体布局管理器使用可能会分解为以下内容,尽管它会根据项目而有所不同:
65%GridBagLayout-无论您需要做什么,都能完成它的一种布局。
15%Box / BoxLayout-非常适合快速轻松地将几个组件粘贴在一起。
12%BorderLayout-适合将按钮面板或信息面板附加到内容面板。 我几乎总是用它来向JFrame添加内容。
3%FlowLayout-对于按钮面板很有用,但其他功能不多。
3%CardLayout-在显示用于不同操作模式的不同内容面板的程序中最有用。
2%其他布局-很少需要其他任何东西,但偶尔也可以使用其中一种布局。
一旦掌握了GridBagLayout的知识,开始编写就没那么糟了,但是使用起来还是以后调试起来还不是很漂亮。 我最近尝试使用MiGLayout做某事,但感到失望的是,在这种情况下,MiGLayout的使用实际上比GridBagLayout复杂得多。
有些人像瘟疫一样避免使用GridBagLayout。 但事实是,有些事情无法结合使用简单的布局。 将GUI分成用于不同逻辑部分的面板是很好的选择,但是我想,如果您只是为了定位组件而创建了一堆不必要的额外嵌套面板,那么您显然需要学习如何使用GridBagLayout(或其他) 类似的高级布局,例如MiGLayout)。 嵌套的BorderLayouts和GridLayouts和BoxLayouts令人讨厌,您的GUI可能看起来还不错,但是一旦有人开始调整应用程序窗口和对话框的大小,使其比原来设计的要小或大,您的GUI就会看起来很恐怖 由于您无法获得如此简单的信息,因此您的客户将开始对您的产品形成负面评价。
更新:我已经在Eclipse中使用WindowBuilder一段时间了,它极大地简化了许多布局的使用,尤其是GridBagLayout。 我过去经常花费大量时间来手工编写布局,但是使用WindowBuilder或任何类似的高级可视化编辑器,您可以在更少的时间内创建布局。
rob answered 2020-07-26T01:05:36Z
15 votes
DesignGridLayout既美观又易于通过流畅的界面使用。
只是看例子:
只需几行干净的代码:
layout.row().grid(label("Last Name")) .add(lastNameField) .grid(label("First Name")) .add(firstNameField);
layout.row().grid(label("Phone")) .add(phoneField) .grid(label("Email")) .add(emailField);
layout.row().grid(label("Address 1")) .add(address1Field);
layout.row().grid(label("Address 2")) .add(address2Field);
layout.row().grid(label("City"), 1) .add(cityField);
layout.row().grid(label("State")) .add(stateField) .grid(label("Postal Code")) .add(postalField);
layout.row().grid(label("Country"), 1) .add(countryField);
layout.emptyRow();
layout.row().center().add(newButton).add(deleteButton).add(editButton).add(saveButton).add(cancelButton);
mantrid answered 2020-07-26T01:06:04Z
11 votes
这取决于您需要哪种布局,这就是为什么要拥有8种布局的原因:
BorderLayout,对于设计常规内容框架(主要内容在中间,辅助对象在侧面),简单且非常有用。
BoxLayout,当您具有应具有相同大小的对象网格时有用(按钮?文本字段?)。
BoxLayout,非常灵活,需要进行一些调整才能很好,而且很冗长(但是如果您想做的很好,我建议您这样做)。
BoxLayout,没用。不是一个很好的布局:只是将一个项目放置在另一个项目的旁边。
BoxLayout,对于必须切换的选项卡或子视图很有用。
BoxLayout,从未使用过太多..它应该是一种增强的FlowLayout,但不够灵活,无法广泛使用。
Jack answered 2020-07-26T01:06:51Z
9 votes
GroupLayout非常不错。 它最初是供GUI Builder应用程序使用的,但我发现手工编写代码也非常简单。
ninesided answered 2020-07-26T01:07:11Z
8 votes
FormLayout(对JGoodies Forms软件包的一部分)对我来说是一柄强马。 它并不是十分灵活,因为它会努力使您的设计看起来不错。 我已经在数十个项目中使用了几年,并且它一直在快速产生美观的输出。
您以易于阅读的文本指定布局,然后添加组件。 做完了
clartaq answered 2020-07-26T01:07:36Z
6 votes
GroupLayout。几乎完成了您需要的所有工作(种类),并且在Java库中。 诚然,它确实需要一些帮助,而且API很糟糕。
GroupLayout确实弄乱了您的布局代码。 好的,所以大多数人的GUI代码是一个大难题。 但是您不必一定是! 也许可以在此布局管理器上放置一个不错的界面,但是我怀疑它可能必须被克隆并拥有。
除非确实需要外部依赖,否则我不赞成引入外部依赖。 另外,许多第三方布局管理器都使用数据字符串,这些字符串具有所有常见的问题。
Tom Hawtin - tackline answered 2020-07-26T01:08:06Z
6 votes
我通常使用带有gridlayout的边框布局,首先我在纸质原型上设计ui,如;
(来源:usernomics.com)
之后,我们可以将屏幕拆分为borderlayout上的gridlayout。 在此图片中,我们看到NORTH,CENTER,SOUTH部分(BorderLayout元素),每个部分的布局可以是gridlayout或BorderLayout,这取决于您。 相同的布局可以在另一个中使用。
baybora.oren answered 2020-07-26T01:08:35Z
5 votes
将IntelliJ IDEA及其GUI设计器一起使用。 使GridBagLayout变得容易。
[HTTP://mad bean.com/阿尼玛/totally grid八卦/]
glebm answered 2020-07-26T01:08:59Z
5 votes
您的问题没有真正的答案,除了:取决于。 这取决于您要创建哪种框架(窗体)。 我不是Swing专家,但创建了几个(中等高级)GUI,并且从来不需要接触GridBagLayout管理器。 我始终能够使用“更轻松”的布局管理器组合来创建我的GUI。 例如,您可以为边框提供BorderLayout,然后在该BorderLayout的SOUTH中放置另一个布局。
Bart Kiers answered 2020-07-26T01:09:19Z
4 votes
我只使用GridBagLayout,尤其是在进行一些复杂的接口时,请相信GridBagLayout可以做任何事情。 我还推荐了FlowLayout,因为它易于使用且易于理解,非常适合放置一组按钮。 实际上,我只使用这两种布局,因为它是JDK库的一部分,因为MigLayout我还没有尝试过,所以现在不能为您推荐它。
jerome answered 2020-07-26T01:09:40Z
3 votes
有以下可用的布局选项:
MiGLayout
TableLayout
GroupLayout
FormsLayout
以上是MigLayout中最值得推荐的一种,因为它是Swing布局管理器。 还有其他人没有太多的曝光。
Joy Malik answered 2020-07-26T01:10:05Z
2 votes
我是Swing的新手,但是在编写第一个Swing应用程序的过程中,我尝试了四种不同的布局管理器:FlowLayout,BoxLayout,GridLayout和GroupLayout。 在我看来,FlowLayout和BoxLayout似乎最适合于布局相似大小的组件组。 对于大小不同的组件,GroupLayout似乎是可行的方法。 学习者的学习曲线比其他两个要好,但绝对值得。 至于GridLayout,我认为您可以通过结合使用FlowLayout和BoxLayout来获得与该布局管理器相同的结果-并且您可能会更好地控制组件的放置。 但是也许那只是我:)
谢尔顿
Sheldon R. answered 2020-07-26T01:10:30Z