你使用哪种布局管理器?

每个人都使用什么java GUI布局管理器? 最近,我一直在使用MigLayout ,它有一些强大的组件控件。 只是想看看除了标准JDK之外的其他开发人员使用的是什么。

MiGLayout是Java开发人员广泛使用的GUI布局管理器。

GridBagLayout可用。 一旦你习惯了它,它就会很好用。 我认为标准的JDK布局管理器本身就非常强大。 此外,您可以最大限度地减少对第三方库的依赖。

MiG和FormLayout(JGoodies)都非常适合手动布局(并且几乎所有布局最终都变为手动)。 我最大的建议是设计您的视图,以便您可以完全删除布局并重新实现它而不会影响您的应用程序(视图和控制器的良好分离是关键)。

绝对看看JGoodie的PresentationModel方法来实现’哑’视图。 我将这种技术与GUI构建器(我使用GroupLayout和Jigloo GUI构建器插件)一起用于抛弃快速原型。 经过3或4次迭代后,通常会出现窗口,我们使用MiG或FormLayout重新实现。

编辑:自从我写这篇文章以来,我已经开始将MiG用于我的所有布局,而且我不再使用GUI构建器 – 使用MiG进行布局非常容易。

我工作的最后一个Swing应用程序使用了JGoodies的FormsLayout 。

我使用GridBagLayout 。 它似乎需要很多代码,但它使得布局非常好看。

我还想将BorderLayout与GridBagLayout面板结合起来,以实现出色的可定制性。

我非常喜欢使用TableLayout而不是GridBagLayout。 一切都是有道理的,而每当我尝试使用GridBagLayout时,它都会粉碎我的灵魂。

我使用GridBagLayout作为控件,但是因为java1.6我将使用GroupLayout很棒

这里有一个截图和示例代码来使用它!

替代文字http://img145.imageshack.us/img145/7844/screenshot1dz8.png

private void layoutComponents(){ JPanel panel = new JPanel(); GroupLayout layout = new GroupLayout(panel); panel.setLayout(layout); layout.setAutoCreateGaps(true); layout.setAutoCreateContainerGaps(true); SequentialGroup hGroup = layout.createSequentialGroup(); JLabel nameLbl = new JLabel("Name"); JLabel countLbl = new JLabel("Amount"); JLabel dateLbl = new JLabel("Date(dd/MM/yy)"); hGroup.addGroup(layout.createParallelGroup(). addComponent(nameLbl). addComponent(countLbl). addComponent(dateLbl). addComponent(go)); hGroup.addGroup(layout.createParallelGroup(). addComponent(name). addComponent(count). addComponent(date)); layout.setHorizontalGroup(hGroup); SequentialGroup vGroup = layout.createSequentialGroup(); vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE). addComponent(nameLbl).addComponent(name)); vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE). addComponent(countLbl).addComponent(count)); vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE). addComponent(dateLbl).addComponent(date)); vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE). addComponent(go)); layout.setVerticalGroup(vGroup); frame.add( panel , BorderLayout.NORTH ); frame.add( new JScrollPane( textArea ) ); } 

我对大多数面板使用DesignGridLayout 。

对于DesignGridLayout无法完全处理的罕见面板,我使用了Borderlayout和DesignGridLayout的混合。

使用DesigngridLayout,您可以使用最少的代码行手动编写布局代码,这些代码行易于输入和读取:

 DesignGridLayouut layout = new DesignGridLayout(myPanel); layout.row().grid(lblFirstName).add(txfFirstName).grid(lblSurName).add(txfSurName); layout.row().grid(lblAddress).add(txfAddress); layout.row().center().add(btnOK, btnCancel); 

面板网格的每一行由一行代码定义。 如您所见,“绘制”您的面板非常简单。

另外,我发现DesignGridLayout有一些独特的function(例如它的“ 智能垂直resize ”)。

GridBagLayoutfunction强大但非常原始:连接布局的代码非常冗长。 这个实用程序库(实际上只包含大约10个类的1个jar文件)简化了很多工作: http : //code.google.com/p/painless-gridbag/以下代码片段引自该站点的主页:

  PainlessGridBag gbl = new PainlessGridBag(getContentPane(), false); gbl.row().cell(lblFirstName).cell(txtFirstName).fillX() .cell(lblFamilyName).cell(txtFamilyName).fillX(); gbl.row().cell(lblAddress).cellXRemainder(txtAddress).fillX(); gbl.doneAndPushEverythingToTop(); 

总的来说,你可能会发现我在太阳下写的一篇文章很有用。 它不是最新的布局管理器,但它集中在布局管理器的有效嵌套,而不是尝试用一个布局做所有事情。

请参阅http://developer.java.sun.com/developer/onlineTraining/GUI/AWTLayoutMgr

我发现对于任何非平凡的GUI,我使用带有嵌套子面板的多个布局,其中主面板可能具有GridBagLayout并且每个子面板(通常没有边框或指示它是面板)使用更简单的布局在可能的情况。 通常我会将BorderLayoutFlowLayoutBoxLayout用于更小,更简单的子面板。 通过将GUI的小部分划分为子面板并使用最简单的布局来控制GUI的这一部分,您可以创建复杂,排列良好的显示,而不会过多地GridBagLayout的许多选项。 此外,通过将类似显示function分组到面板中,它可以创建更易读的代码。

为尾锥gui建造者开发的spring布局是netbeans的一部分。

我也使用过GroupLayout 。 同样,它是Java6的标准JDK布局管理器,但您也可以单独找到该库。

我一直是GridBagLayout的忠实粉丝。 它类似于HTML表格,因此对于那些网络程序员来说是直观的。

我开始使用各种嵌套布局,然后转移到GridBagLayout(这非常令人沮丧)。 从那以后我尝试了FormLayout(但发现它不适合除了表格以外的任何东西)并坚定地坚持使用TableLayout,这对我来说非常满意。

从那以后我发现了MiGLayout,虽然我做的不多,但它看起来非常有能力,与TableLayout非常相似,可能还有点清洁。

对我来说最重要的是MiGLayout将成为JDK的一部分,因此我打算在它出现时几乎完全使用它。

另一件需要记住的事情是,无论你选择哪种重量级的LayoutManager,总会有一些更简单的布局管理器,比如GridLayout。 我已经看到GridBagLayout做了一些可怕的事情,可以通过更简单的布局管理器轻松完成。

我更喜欢最小化对第三方库的依赖性,因此对于对话框通常是BoxLayout,对于“复杂”布局通常是GridBagLayout。 GridBagLayout很容易理解,但有点难以配置。 我自己写了一个从HTML布局创建代码的工具(希望也可以帮助其他人): http : //www.onyxbits.de/content/blog/patrick/java-gui-building-gridbaglayout-manager-made-easy

我找到的唯一一个布局管理器,我真正喜欢的是相对布局管理器 。 相对布局管理器的工作方式与对话框在概念上的组织方式一致。 一个缺点是,这个布局管理器处理附加约束。 它似乎没有处理比率限制。 幸运的是它设计得很好,我能够实现这个function。

我在嵌套BoxLayout和SpringLayout时有90%的时间使用BorderLayout

我是一个Java新手。

我尝试了GridBagLayout,放弃了,然后尝试了BoxLayout,然后放弃了,然后制作了我自己的自定义布局 。 使用GridBag和Box我最好的猜测,布局引擎决定做一些不同的事情,没有任何明显的方法来调试它们。

通过我的自定义布局,我可以打印出坐标,宽度和高度,以找出它出错的地方。 它有点蹩脚放置东西,但你已经掌握了java的全部function,而不是其中一个内置布局管理器的有限词汇。

当然,这只是一个家庭项目,你永远不会被允许在工作中这样做。

我使用GridBagLayout作为布局的forms,使用BorderLayout进行简单的布局,使用FlowLayout作为水平图标/按钮的数量,两者之间有一些空格。 Netbeans也是一个很好的GUI构建器,可以避免大量繁琐的布局编码来节省您的时间。

我最近开始使用Swing,我正在使用GridBagLayout。

我厌倦了那些需要很多设置的布局管理员,不是很容易阅读或者用手工做的很累,所以我写了一个非常简单的laoutmanager,它使用两个光电传感器的抽象来保持每个组件的位置。 您可以像这样添加组件: parent.add(child,"topleft(0, 0.5)bottomright(0.5,1.0)");

看看这里https://github.com/hageldave/UsefulStuff/blob/master/src/PhotoCornersLayout.java ;)你自己应对正确的布局,因为它没有检查你的布局的重叠或其他缺点。