Car*_*icz 43 java layout swing layout-manager
仅Java库中就有8个布局管理器,然后还有一堆第三方产品.
前几天,我试图使用SpringLayout ......好吧,它对我不起作用.看到我的另一个问题.所以...如果你有一个Swing应用程序的设计,并希望您的布局只是这样,什么是您的首选布局管理器?有关的任何有趣/有用的经历?
更新:是的,确定我知道不同的LM适合不同的布局.但是我希望大多数人在你做的大部分事情中都使用1,2或3,或者你发誓这是一个多才多艺的你永远不需要的东西.有足够的响应,我希望看到类似钟形曲线,GridBagLayout或MigLayout(例如)上的峰值以及使用(例如)BoxLayout或FlowLayout的几个散乱者的长尾.
希望,回复的分布将揭示人们最常使用什么来获取Stuff Done ™的一些趋势
好的,差不多2天后,MiGLayout绝对不在眼前!它的粉丝很高兴听到这个布局很快就会进入"官方"图书馆.
GroupLayout,FormsLayout和TableLayout相对较新,并没有得到太多曝光.也许其他人会像我一样惊讶地发现它们.
Joo*_*kka 62
毫无疑问,MiGLayout.老实说,这是我所知道的唯一有意义的Swing布局管理器.
事实上,核心JDK中有8个布局管理器是Swing创建者完全不知道他们想要做什么的一个好兆头.这不是要废弃其余的Swing - 它是一个很好的GUI工具包,除了布局管理器.
Mic*_*rdt 22
所有这些,结合起来.这就是重点.每个布局管理器都满足不同的要求,通过嵌套不同布局管理器的面板,您几乎可以实现任何目标.
"在单个面板中做所有事情"布局管理器GridBagLayout和GroupLayout(以及许多第三方)布局管理器都有它们的位置,主要是当您需要布局的不同部分中的组件对齐时,但是布局较大时,它们通常会导致巨大的,难以处理的混乱.
rob*_*rob 17
这取决于您创建的GUI类型.您可能只使用一个或两个简单布局,或者您可能需要达到更高级的布局.我的整体布局管理器使用可能会分解为类似的东西,尽管它会因项目而异:
一旦你掌握了GridBagLayout,最初编写它并不是那么糟糕,但它仍然不适合使用,或以后调试.我最近尝试了MiGLayout,并且很惊讶地发现MiGLayout 在特定情况下实际上比GridBagLayout 更复杂.
有些人试图像瘟疫一样避免GridBagLayout; 但事实是,有些东西没有简单布局的组合就能处理.将GUI分成不同逻辑部分的面板是很好的,但我认为如果你为了定位组件而创建了一大堆不必要的额外嵌套面板,你显然需要学习如何使用GridBagLayout(或其他)类似高级布局,如MiGLayout).您可以通过嵌套的BorderLayouts和GridLayouts以及BoxLayouts让您的GUI看起来很好看,但是只要有人开始调整您的应用程序窗口和对话框的大小比您最初设计它们更小或更大,您的GUI可能看起来很糟糕并且您的客户将开始对您的产品形成负面看法,因为您无法做到这么简单.
更新:我已经在Eclipse中使用WindowBuilder一段时间了,它大大简化了许多布局的工作,尤其是GridBagLayout.我曾经花了很多时间手工编写布局,但是使用WindowBuilder或者任何类似的高级可视化编辑器,您可以在更短的时间内创建布局.
man*_*rid 15
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);
Run Code Online (Sandbox Code Playgroud)
Jac*_*ack 11
这取决于你需要哪种布局,这就是为什么你有8个布局:
BorderLayout,简单而且非常有用的设计普通内容框架(主要内容在中间,助手在侧面).GridLayout,当你有一个对象网格应该是相同的大小(按钮?textfields?)时很有用.GridBagLayout,非常灵活,需要一些调整要被罚款,这是非常详细的(但我raccomend,如果你想要做的事情做好).FlowLayout,没用..不是很布局:只需将第一项放在另一项旁边.CardLayout,对必须切换的标签或子视图很有用.BoxLayout从来没有过多地使用它......它应该是一种增强的,FlowLayout但它不够灵活,不能集中使用.GroupLayout很不错.它原本打算供GUI Builder应用程序使用,但我发现手动编码非常简单.
FormLayout,JGoodies Forms包的一部分对我来说是一个主力.它并不是非常灵活,因为它很难让你的设计看起来很好.我已经在几十个项目中使用了它好几年,并且它一直在快速产生好看的输出.
您可以用人类可读的文本指定布局,然后添加组件.完成.
GridBagLayout.几乎所有你需要的东西(种类)和它在Java库中.不可否认,它确实需要一些帮助,API非常糟糕.
GroupLayout使你的布局代码变得混乱.好的,所以大多数人的GUI代码都是一个很大的漏洞.但你不一定要这样!也许一个不错的界面可以放在这个布局管理器上,但我怀疑它可能必须克隆并拥有.
除非真的有必要,否则我不赞成引入外部依赖项.许多第三方布局管理器也使用数据字符串,这些字符串具有所有常见问题.
我通常使用带有gridlayout的边框布局,首先我在纸质原型上设计ui;
alt text http://www.usernomics.com/images/paper-mockup.jpg
之后我们可以在borderlayout上将屏幕分割为gridlayout.在这张图片中我们看到NORTH,CENTER,SOUTH部分(BorderLayout元素),每个部分的布局都可以是gridlayout或BorderLayout,它取决于你.相同的布局可以在另一个中使用.
你的问题没有真正的答案,除了:它取决于你.这取决于您尝试创建的框架(窗体)类型.我不是Swing-guru,但创建了一些(中等高级)GUI,并且从未需要触摸GridBagLayout管理器.我总是能够使用"更简单"的布局管理器来创建我的GUI.例如,您可以为框架提供BorderLayout,然后在该BorderLayout的SOUTH中放置另一个布局.
| 归档时间: |
|
| 查看次数: |
40936 次 |
| 最近记录: |