MiG和FormLayout(JGoodies)都非常适合手动布局(并且几乎所有布局最终都变为手动).我最大的建议是设计您的视图,以便您可以完全删除布局并重新实现它而不会影响您的应用程序(视图和控制器的良好分离是关键).
绝对看看JGoodie的PresentationModel方法来实现'哑'视图.我将这种技术与GUI构建器(我使用GroupLayout和Jigloo GUI构建器插件)一起用于抛弃快速原型.经过3或4次迭代后,通常会出现窗口,我们使用MiG或FormLayout重新实现.
编辑:自从我写这篇文章以来,我已经开始将MiG用于我的所有布局,而且我不再使用GUI构建器 - 使用MiG进行布局非常容易.
我使用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 ) );
}
Run Code Online (Sandbox Code Playgroud)
我对大多数面板使用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);
Run Code Online (Sandbox Code Playgroud)
面板网格的每一行由一行代码定义.如您所见,"绘制"您的面板非常简单.
另外,我发现DesignGridLayout
有一些独特的功能(例如它的" 智能垂直调整大小 ").
归档时间: |
|
查看次数: |
5269 次 |
最近记录: |