每个人都使用什么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
有一些独特的功能(例如它的" 智能垂直调整大小 ").