1. 程式人生 > >Java_GUI中GridBagLayout佈局使用詳解

Java_GUI中GridBagLayout佈局使用詳解

  1. GridBagLayout以表格形式佈置容器內的元件, 將每個元件放置在每個單元格內,而一個單元格可以跨越多個單元格合併成一個單元格,即多個單元格可以組合成一個單元格,從而實現元件的自由佈局。
  2. 每一個單元格都有各自的屬性,而這些屬性由GridBagConstrainsts類的成員變數來定義,且GridBagConstriaints中的所有成員變數都是public的。
  3. 建構函式:
    GirdBagLayout()建立一個新的GridBagLayout管理器。
    GridBagConstraints()建立一個新的GridBagConstraints物件。
    GridBagConstraints(int gridx,int gridy,int gridwidth,int gridheight,double weightx,double weighty,int anchor,int fill, Insets insets,int ipadx,int ipady)
    建立一個新的GridBagConstraints物件,並指定其引數的值。
  4. 下面提供一個用來設定GridBagConstraints物件各引數的幫助類
import java.awt.GridBagConstraints;
import java.awt.Insets;
/**
 1. 
 2. @author han
 3.         功能:用來設定GridBagConstraints物件的一些引數
 4. 
 */
public class GBC extends GridBagConstraints {
    /**
     * 初始化左上角位置 gridx,gridy —— 設定元件的位置,
     * gridx=0,gridy=0時放在0行0列。
     * 
     * @param
gridx * @param gridy */
public GBC(int gridx, int gridy) { this.gridx = gridx; this.gridy = gridy; } /** * 初始化左上角位置和所佔行數和列數 * * gridwidth,gridheight —— 用來設定元件所佔的單位長度與高度,預設值皆為1。 * 可以使用GridBagConstraints.REMAINDER常量, * 代表此元件為此行或此列的最後一個 元件,而且會佔據所有剩餘的空間。 * * @param
gridx * @param gridy * @param gridwidth * @param gridheight */
public GBC(int gridx, int gridy, int gridwidth, int gridheight) { this.gridx = gridx; this.gridy = gridy; this.gridwidth = gridwidth; this.gridheight = gridheight; } /** * 對齊方式 anchor:設定元件在單元格中的對齊方式。 * 由以下常量來定義 * * GridBagConstraints.CENTER * * GridBagConstraints.EAST * * GridBagConstraints.WEST * * GridBagConstraints.SOUTH * * GridBagConstraints.NORTH * * GridBagConstraints.SOUTHEAST * * GrisBagConstraints.SOUTHWEST * * GridBagConstraints.NORTHEAST * * GridBagConstraints.NORTHWEST * * @param anchor * @return */ public GBC setAnchor(int anchor) { this.anchor = anchor; return this; } /** * 是否拉伸及拉伸方向 * * fill:當某個元件未能填滿單元格時,可由此屬性設定橫向、 * 縱向或雙向填滿。由以下常量來定義 * * GridBagConstraints.NONE * * GridBagConstraints.HORIZONTAL * * GridBagConstraints.VERTICAL * * GridBagConstraints.BOTH * * @param fill * @return */ public GBC setFill(int fill) { this.fill = fill; return this; } /** * x和y方向上的增量 * * weightx,weighty——用來設定視窗變大時,各元件跟著變大的比例。 * 當數字越大,表示元件能得到更多的空間,預設值皆為0(0-1)。 * * @param weightx * @param weighty * @return */ public GBC setWeight(double weightx, double weighty) { this.weightx = weightx; this.weighty = weighty; return this; } /** * 外部填充 * * @param distance * @return */ public GBC setInsets(int distance) { this.insets = new Insets(distance, distance, distance, distance); return this; } /** * 外填充 * * insets —— 設定元件之間彼此的間距。 * 它有四個引數,分別是上,左,下,右,預設為(0,0,0,0)。 * * @param top * @param left * @param bottom * @param right * @return */ public GBC setInsets(int top, int left, int bottom, int right) { this.insets = new Insets(top, left, bottom, right); return this; } /** * 內填充 * * ipadx,ipady —— 設定元件間距,預設值為0。 * * @param ipadx * @param ipady * @return */ public GBC setIpad(int ipadx, int ipady) { this.ipadx = ipadx; this.ipady = ipady; return this; } }
  1. GridBagLayout佈局的一個案例—->使三個帶顏色的面板一直在Frame視窗的中央顯示(無論視窗放大還是縮小)
import java.awt.Color;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.GridBagLayout;
/**
 * 
 * @author han
 * 
 * 使用GridBagLayout佈局的一個案例
 * 
 * 功能:使三個帶顏色的面板一直在Frame視窗的中央顯示(無論視窗放大還是縮小)
 * 
 */
public class GridBagLayoutTest extends JFrame {

    private static final long serialVersionUID = 1391949900949468015L;
    private JPanel contentPane;

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    GridBagLayoutTest frame = new GridBagLayoutTest();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    public GridBagLayoutTest() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 511, 500);
        setTitle("GridBagLayout佈局案例");
        contentPane = new JPanel();
        setContentPane(contentPane);
        GridBagLayout gbl_contentPane = new GridBagLayout();
        contentPane.setLayout(gbl_contentPane);

        JPanel jPanel1 = new JPanel();
        jPanel1.setSize(300, 100);
        jPanel1.setBackground(Color.blue);
        JPanel jPanel2 = new JPanel();
        jPanel2.setSize(300, 300);
        jPanel2.setBackground(Color.red);
        JPanel jPanel3 = new JPanel();
        jPanel3.setSize(300, 100);
        jPanel3.setBackground(Color.YELLOW);

        //如果加入的是空的面板時需要把內部填充的大小與面板size的大小設為一樣。
        contentPane.add(jPanel1, new GBC(0, 1).setInsets(20, 0, 20, 0)
                .setWeight(1, 0).setIpad(300, 100));
        contentPane.add(jPanel2, new GBC(0, 2).setInsets(20, 0, 20, 0)
                .setWeight(1, 0).setIpad(300, 100));
        contentPane.add(jPanel3, new GBC(0, 3).setInsets(20, 0, 20, 0)
                .setWeight(1, 0).setIpad(300, 100));

    }

}