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);
/** * @author :陶偉基 ,微博:http://weibo.com/taoandtao * @date :2012/12/10 * @place:廣州大學華軟軟件學院 */ import javax.swing.GroupLayout; import javax.swing.GroupLayout.Alignment; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JPasswordField; import javax.swing.JRadioButton; import javax.swing.JTextField; public class MyFrame extends javax.swing.JFrame { public static void main(String[] args) { MyFrame f = new MyFrame(); } JLabel label1; JLabel label2; JLabel label3; JTextField tf; JPasswordField psf; JRadioButton rb1; JRadioButton rb2; JButton bt1; JButton bt2; public MyFrame() { this.setVisible(true); this.setSize(250, 220); this.setVisible(true); this.setLocation(400, 200); label1 = new JLabel("華軟BBS快捷登陸"); label2 = new JLabel("賬號:"); label3 = new JLabel("密碼:"); tf = new JTextField(); psf = new JPasswordField(); rb1 = new JRadioButton("記住密碼"); rb2 = new JRadioButton("自動登陸"); bt1 = new JButton("登陸"); // 為指定的 Container 創建 GroupLayout GroupLayout layout = new GroupLayout(this.getContentPane()); this.getContentPane().setLayout(layout); //創建GroupLayout的水平連續組,,越先加入的ParallelGroup,優先級級別越高。 GroupLayout.SequentialGroup hGroup = layout.createSequentialGroup(); hGroup.addGap(5);//添加間隔 hGroup.addGroup(layout.createParallelGroup().addComponent(label2) .addComponent(label3)); hGroup.addGap(5); hGroup.addGroup(layout.createParallelGroup().addComponent(label1) .addComponent(psf).addComponent(rb1).addComponent(rb2) .addComponent(tf).addComponent(bt1)); hGroup.addGap(5); layout.setHorizontalGroup(hGroup); //創建GroupLayout的垂直連續組,,越先加入的ParallelGroup,優先級級別越高。 GroupLayout.SequentialGroup vGroup = layout.createSequentialGroup(); vGroup.addGap(10); vGroup.addGroup(layout.createParallelGroup().addComponent(label1)); vGroup.addGap(10); vGroup.addGroup(layout.createParallelGroup().addComponent(label2) .addComponent(tf)); vGroup.addGap(5); vGroup.addGroup(layout.createParallelGroup().addComponent(label3) .addComponent(psf)); vGroup.addGroup(layout.createParallelGroup().addComponent(rb1)); vGroup.addGroup(layout.createParallelGroup().addComponent(rb2)); vGroup.addGroup(layout.createParallelGroup(Alignment.TRAILING) .addComponent(bt1)); vGroup.addGap(10); //設置垂直組 layout.setVerticalGroup(vGroup); } }