题
每个人都使用什么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 非常棒。
这里有截图和使用它的示例代码!。
alt text 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
具有一些独特的功能(例如“智能垂直调整大小”)。
GridBagLayout非常强大但非常原始:连接布局的代码非常冗长。这个实用程序库(实际上只包含大约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
和每个子面板(通常没有边框或指示它是一个面板)尽可能使用更简单的布局。通常,我会使用 BorderLayout
, FlowLayout
和 BoxLayout
来获得更小,更简单的子面板。通过将GUI的小部分划分为子面板并使用最简单的布局来控制GUI的这一部分,您可以创建复杂,排列良好的显示,而不必担心 GridBagLayout
的许多选项。此外,通过将类似显示功能分组到面板中,它可以创建更易读的代码。
弹簧布局 mantissa gui builder是netbeans的一部分。
我使用了 GroupLayout 同样。同样,它是Java6的标准JDK布局管理器,但您也可以单独找到该库。
我一直是GridBagLayout的忠实粉丝。它类似于HTML表格,因此对于那些网络程序员来说是直观的。
我开始使用各种嵌套布局,然后转移到GridBagLayout(这非常令人沮丧)。从那以后我尝试了FormLayout(但发现它不适合除了表格以外的任何东西)并坚定地坚持使用TableLayout,这对我来说非常满意。
从那以后我发现了MiGLayout,虽然我没有做太多的事情,但它似乎非常有能力,非常类似于TableLayout,可能还有点清洁。
对我来说最重要的是MiGLayout将成为JDK的一部分,因此我打算在它出现时几乎完全使用它。
要记住的另一件事是,无论你选择哪种重量级的LayoutManager,总会有一些更简单的布局管理器,比如GridLayout。我已经看到GridBagLayout做了一些可怕的事情,可以通过更简单的布局管理器轻松完成。
我更喜欢最小化对第三方库的依赖性,因此对于对话框通常是BoxLayout而对于“复杂”而言通常是GridBagLayout。布局。 GridBagLayout很容易理解,但有点难以配置。我自己写了一个从HTML布局创建代码的工具(希望也可以帮助其他人): http://www.onyxbits。德/内容/博客/帕特里克/ Java的GUI建设-的GridBagLayout经理制的易
我找到的唯一布局管理器,我实际上喜欢是相对布局管理器。相对布局管理器的工作方式与概念组织对话框的方式一致。一个缺点是,这个布局管理器处理附加约束。 不似乎处理比率限制。幸运的是它设计得很好,我能够实现这个功能。
我使用 BorderLayout 嵌套时有90%的时间 BoxLayout 和 SpringLayout
我是一个Java新手。
我试过GridBagLayout,放弃了,然后尝试了BoxLayout,然后放弃了,然后做了我自己的自定义布局有效。使用GridBag和Box我最好的猜测,布局引擎决定做一些不同的事情,没有任何明显的方法来调试它们。
通过我的自定义布局,我可以打印出坐标,宽度和高度,以找出它出错的地方。它有点蹩脚放置东西,但你已经掌握了java的全部功能,而不是其中一个内置布局管理器的有限词汇。
当然,这只是一个家庭项目,你永远不会被允许在工作中这样做。
我使用GridBagLayout作为布局的形式,使用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 ;) 你自己应该对正确的布局做出反应,因为它不会检查你的布局的重叠或其他缺点。