每个人都使用什么java GUI布局管理器?最近,我一直在使用MigLayout,它有一些强大的组件控件。只是想看看除了标准JDK之外的其他开发人员使用的是什么。
答案 0 :(得分:17)
MiGLayout是Java开发人员广泛使用的GUI布局管理器。
答案 1 :(得分:9)
GridBagLayout可用。一旦你习惯了它,它就会很好用。我认为标准的JDK布局管理器本身就非常强大。此外,您可以最大限度地减少对第三方库的依赖。
答案 2 :(得分:7)
MiG和FormLayout(JGoodies)都非常适合手动布局(并且几乎所有布局最终都变为手动)。我最大的建议是设计你的视图,这样你就可以完全删除布局并重新实现它,而不会影响你的应用程序(这里很好地分离了视图和控制器)。
绝对可以看一下JGoodie的PresentationModel方法来实现'哑'视图。我将这种技术与GUI构建器(我使用GroupLayout和Jigloo GUI构建器插件)一起用于抛弃快速原型。经过3或4次迭代后,通常会出现窗口,我们使用MiG或FormLayout重新实现。
编辑:自从我写这篇文章以来,我已经开始将MiG用于我的所有布局,并且我不再使用GUI构建器 - 使用MiG进行布局非常容易。答案 3 :(得分:5)
我使用的最后一个Swing应用程序使用了JGoodies' FormsLayout。
答案 4 :(得分:5)
我对大部分面板使用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
有一些独特的功能(例如“智能垂直调整大小”)。
答案 5 :(得分:5)
我使用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 ) );
}
答案 6 :(得分:5)
我非常喜欢使用TableLayout而不是GridBagLayout。一切都是有道理的,而每当我尝试使用GridBagLayout时,它都会粉碎我的灵魂。
答案 7 :(得分:5)
我使用GridBagLayout。它似乎需要很多代码,但它使得布局非常好看。
我还希望将BorderLayout与GridBagLayout面板结合起来,以实现出色的可定制性。
答案 8 :(得分:3)
GridBagLayout非常强大但非常原始:连接布局的代码非常冗长。这个实用程序库(实际只有1个包含大约10个类的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();
答案 9 :(得分:2)
总的来说,你可能会发现我在太阳下写的一篇文章很有用。它不是最新的布局管理器,但它集中在布局管理器的有效嵌套,而不是尝试用一个布局做所有事情。
请参阅http://developer.java.sun.com/developer/onlineTraining/GUI/AWTLayoutMgr
答案 10 :(得分:2)
我发现对于任何非平凡的GUI,我使用带有嵌套子面板的多个布局,其中主面板可能有GridBagLayout
和每个子面板(通常没有边框或指示它是面板)尽可能使用更简单的布局。通常,我会将BorderLayout
,FlowLayout
和BoxLayout
用于更小,更简单的子面板。通过将GUI的小部分划分为子面板并使用最简单的布局来控制GUI的这一部分,您可以创建复杂,布局合理的显示,而不必担心GridBagLayout
的许多选项。此外,通过将类似显示功能分组到面板中,它可以创建更易读的代码。
答案 11 :(得分:1)
我一直是GridBagLayout的忠实粉丝。它类似于HTML表格,因此对于那些网络程序员来说是直观的。
答案 12 :(得分:1)
我也使用了GroupLayout。同样,它是Java6中的标准JDK布局管理器,但您也可以单独找到该库。
答案 13 :(得分:1)
我开始使用各种嵌套布局,然后转移到GridBagLayout(这非常令人沮丧)。从那以后我尝试了FormLayout(但发现它不适合除了表格以外的任何东西)并坚定地坚持使用TableLayout,这对我来说非常满意。
从那以后我发现了MiGLayout,虽然我没有做太多的事情,但它似乎非常有能力,非常类似于TableLayout,可能还有点清洁。
对我来说最重要的是MiGLayout将成为JDK的一部分,因此我打算在它出现时几乎完全使用它。
要记住的另一件事是,无论你选择哪种重量级的LayoutManager,总会有一些更简单的布局管理器,比如GridLayout。我已经看到GridBagLayout做了一些可怕的事情,可以通过更简单的布局管理器轻松完成。
答案 14 :(得分:1)
Spring layout是netbeans的一部分。
答案 15 :(得分:1)
我更喜欢最小化对第三方库的依赖性,因此对于对话框通常是BoxLayout,对于“复杂”布局通常是GridBagLayout。 GridBagLayout很容易理解,但有点难以配置。我自己写了一个从HTML布局创建代码的工具(希望也可以帮助其他人): http://www.onyxbits.de/content/blog/patrick/java-gui-building-gridbaglayout-manager-made-easy
答案 16 :(得分:0)
我找到的唯一布局管理器,我实际上喜欢是Relative Layout Manager。相对布局管理器的工作方式与概念组织的对话框的方式一致。一个缺点是,这个布局管理器处理附加约束。 不似乎处理比率限制。幸运的是它设计得很好,我能够实现这个功能。
答案 17 :(得分:0)
答案 18 :(得分:0)
我是一个Java新手。
我尝试了GridBagLayout,放弃了,然后尝试了BoxLayout,然后放弃了,然后让自己的Custom Layout工作了。使用GridBag和Box我最好的猜测,布局引擎决定做一些不同的事情,没有任何明显的方法来调试它们。
通过我的自定义布局,我可以打印出坐标,宽度和高度,以找出它出错的地方。它有点蹩脚放置东西,但你已经掌握了java的全部功能,而不是其中一个内置布局管理器的有限词汇。
当然,这只是一个家庭项目,你永远不会被允许在工作中这样做。
答案 19 :(得分:0)
我使用GridBagLayout作为布局的形式,使用BorderLayout进行简单的布局,使用FlowLayout作为水平图标/按钮的数量,两者之间有一些空格。 Netbeans也是一个很好的GUI构建器,可以避免大量繁琐的布局编码来节省您的时间。
答案 20 :(得分:0)
我最近开始使用Swing而且我正在使用GridBagLayout。
答案 21 :(得分:0)
我厌倦了那些需要很多设置的布局管理员,不是很容易阅读或用手工做的,所以我写了自己非常简单的laoutmanager,它使用两个光电传感器的抽象来保持每个组件的位置。您可以像这样添加您的组件:parent.add(child,"topleft(0, 0.5)bottomright(0.5,1.0)");
看看这里https://github.com/hageldave/UsefulStuff/blob/master/src/PhotoCornersLayout.java;) 你自己应该对正确的布局做出反应,因为它不会检查你的布局的重叠或其他缺点。