標籤:屬性 location 產生 建立 可見 方式 rand 效能 pack
摘自http://www.cnblogs.com/lionden/archive/2012/12/11/grouplayout.html
(轉)Java 的swing.GroupLayout布局管理器的使用方法和執行個體
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 package com.wst.bj; 2 3 import javax.swing.GroupLayout; 4 import javax.swing.GroupLayout.Alignment; 5 import javax.swing.JButton; 6 import javax.swing.JLabel; 7 import javax.swing.JPasswordField; 8 import javax.swing.JRadioButton; 9 import javax.swing.JTextField;10 public class GroupLayoutDemo extends javax.swing.JFrame {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 GroupLayoutDemo() {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(300);35 rb1 = new JRadioButton("記住密碼");36 rb2 = new JRadioButton("自動登陸");37 bt1 = new JButton("登陸");38 // 為指定的 Container 建立 GroupLayout39 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
(轉)Java 的swing.GroupLayout布局管理器的使用方法和執行個體