您的位置:首页 > 编程语言 > Java开发

(转)Java 的swing.GroupLayout布局管理器的使用方法和实例

2012-12-11 17:52 405 查看
  GroupLayout
是一个
LayoutManager
,它将组件按层次分组,以决定它们在
Container
中的位置。
GroupLayout
主要供生成器使用,但也可以手工编码。分组由
Group
类的实例来完成。
GroupLayout
支持两种组。串行组 (sequential group) 按顺序一个接一个地放置其子元素。并行组 (parallel group) 能够以四种方式对齐其子元素。

  每个组可以包含任意数量的元素,其中元素有
Group
Component
或间隙 (gap)。间隙可被视为一个具有最小大小、首选大小和最大大小的不可见组件。此外,
GroupLayout
还支持其值取自
LayoutStyle
的首选间隙。

  GroupLayout是一个很重要的是额布局管理器,在jdk 1.6才加入,配合其它的管理器可以实现很好的界面。
。。

  GroupLayout必须要设置它的GroupLayout.setHorizontalGroup和GroupLayout.setVerticalGroup。


  GroupLayout.setHorizontalGroup是指按照水平来确定,下面例子“账号”和“密码”是一个级别的,其它的组件也是一个级别的。详情请看代码

  GroupLayout.setVerticalGroup。是按照垂直来确定的。他们的级别是按照Group去设置组件的优先级别,级别越高就显示越上面。

  GroupLayout.setHorizontalGroup(SequentialGroup(ParallelGroup(component)));

  大概就是按照这个顺序去添加,当然不是就这么简单设置,多个component添加到ParallelGroup,然后多个ParallelGroup添加到SequentialGroup里面,然后就设置到GroupLayout

  下面的实例,设置GroupLayout.setHorizontalGroup,就是把2和4添加到一个ParallelGroup.addComponent(component),其它1,3,5,6,7,8添加到另一个ParallelGroup,然后把这两个ParallelGroup按照顺序添加到SequentialGroup.addGrou(ParallelGroup);





1 import javax.swing.GroupLayout;
2 import javax.swing.GroupLayout.Alignment;
3 import javax.swing.JButton;
4 import javax.swing.JLabel;
5 import javax.swing.JPasswordField;
6 import javax.swing.JRadioButton;
7 import javax.swing.JTextField;
8 public class MyFrame extends javax.swing.JFrame {
9     public static void main(String[] args) {
10         MyFrame f = new MyFrame();
11     }
12
13     JLabel label1;
14     JLabel label2;
15     JLabel label3;
16     JTextField tf;
17     JPasswordField psf;
18     JRadioButton rb1;
19     JRadioButton rb2;
20
21     JButton bt1;
22     JButton bt2;
23
24     public MyFrame() {
25         this.setVisible(true);
26         this.setSize(250, 220);
27         this.setVisible(true);
28         this.setLocation(400, 200);
29
30         label1 = new JLabel("华软BBS快捷登陆");
31         label2 = new JLabel("账号:");
32         label3 = new JLabel("密码:");
33         tf = new JTextField();
34         psf = new JPasswordField();
35         rb1 = new JRadioButton("记住密码");
36         rb2 = new JRadioButton("自动登陆");
37         bt1 = new JButton("登陆");
38         // 为指定的 Container 创建 GroupLayout
39         GroupLayout layout = new GroupLayout(this.getContentPane());
40         this.getContentPane().setLayout(layout);
41         //创建GroupLayout的水平连续组,,越先加入的ParallelGroup,优先级级别越高。
42         GroupLayout.SequentialGroup hGroup = layout.createSequentialGroup();
43         hGroup.addGap(5);//添加间隔
44         hGroup.addGroup(layout.createParallelGroup().addComponent(label2)
45                 .addComponent(label3));
46         hGroup.addGap(5);
47         hGroup.addGroup(layout.createParallelGroup().addComponent(label1)
48                 .addComponent(psf).addComponent(rb1).addComponent(rb2)
49                 .addComponent(tf).addComponent(bt1));
50         hGroup.addGap(5);
51         layout.setHorizontalGroup(hGroup);
52         //创建GroupLayout的垂直连续组,,越先加入的ParallelGroup,优先级级别越高。
53         GroupLayout.SequentialGroup vGroup = layout.createSequentialGroup();
54         vGroup.addGap(10);
55         vGroup.addGroup(layout.createParallelGroup().addComponent(label1));
56         vGroup.addGap(10);
57         vGroup.addGroup(layout.createParallelGroup().addComponent(label2)
58                 .addComponent(tf));
59         vGroup.addGap(5);
60         vGroup.addGroup(layout.createParallelGroup().addComponent(label3)
61                 .addComponent(psf));
62         vGroup.addGroup(layout.createParallelGroup().addComponent(rb1));
63
64         vGroup.addGroup(layout.createParallelGroup().addComponent(rb2));
65         vGroup.addGroup(layout.createParallelGroup(Alignment.TRAILING)
66                 .addComponent(bt1));
67         vGroup.addGap(10);
68         //设置垂直组
69         layout.setVerticalGroup(vGroup);
70     }
71 }


=========================================

  之前做的一个东西(现在搁置了下来),就是在整个frame里有很多组件,布局需要好好的整理的那种,我是用了GridBagLayout。号称,GridBagLayout是Java

Awt中最复杂,最强大的LayoutManager,表示同意。使用GridBagLayout,很好的完成了组件的布局。虽然是最后的界面格式挺漂亮、挺符合当初设计的,但过程中需要多次设置gridx,gridy(组件的网格位置,类似于坐标系),gridWidth,gridHeight(组件横纵说跨的单元格数)的值,尽管我已经尽最大力去安排同属性的挨着初始化。当时就考虑有没有按组布局的,前几天找到了API 文档,还没来得及学习,今天无意中发现51CTO推送的一篇文章中有这个。哈哈。

  人数AWT太丑,Swing性能太差。我看这个GroupLayout挺屌的。

原博地址:http://www.cnblogs.com/taoweiji/archive/2012/12/10/2812221.html

Lionden Lee
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐