GridBagConstraint

GridBagConstraint,是一個靈活的布局管理器,不要求組件的大小相同便可以將組件垂直、水平或沿它們的基線對齊。

java.awt.GridBagLayout:一個靈活的布局管理器,它不要求組件的大小相同便可以將組件垂直、水平或沿它們的基線對齊。每個 GridBagLayout 對象維持一個動態的矩形單元格線,每個組件占用一個或多個這樣的單元,該單元被稱為顯示區域。每個由 GridBagLayout 管理的組件都與 GridBagConstraints 的實例相關聯。Constraints 對象指定組件的顯示區域在格線中的具體放置位置,以及組件在其顯示區域中的放置方式。除了 Constraints 對象之外,GridBagLayout 還考慮每個組件的最小大小和首選大小,以確定組件的大小。格線的總體方向取決於容器的 ComponentOrientation 屬性。對於水平的從左到右的方向,格線坐標 (0,0) 位於容器的左上角,其中 X 向右遞增,Y 向下遞增。對於水平的從右到左的方向,格線坐標 (0,0) 位於容器的右上角,其中 X 向左遞增,Y 向下遞增。
要使用GridBagLayout,必須使用GridBagConstraints對象來指定GridBagLayout中組件的位置。
GridBagLayout類的setConstraints方法用Component和GridBagConstraints作為參數來設定Component的約束。
構造方法:
GridBagLayout():創建格線包布局管理器。
常用方法:
void setConstraints(Component comp, GridBagConstraints constraints):設定此布局中指定組件的約束條件。
java.awt.GridBagConstraints:用於指定使用 GridBagLayout 類布置的組件的約束。
構造方法:
GridBagConstraints(): 創建一個 GridBagConstraint 對象,將其所有欄位都設定為默認值。
GridBagConstraints(int gridx, int gridy, int gridwidth, int gridheight, double
weightx, double weighty, int anchor, int fill, Insets insets, int ipadx, int ipady):創建一個 GridBagConstraints 對象,將其所有欄位都設定為傳入參數。
gridx:指定包含組件的顯示區域開始邊的單元格.[默認值為 RELATIVE。gridx 應為非負值。]
其中行的第一個單元格為 gridx=0。組件顯示區域的開始邊指的是水平的、從左到右的容器的左邊緣,以及水平的、從右到左的容器的右邊緣。值 RELATIVE 指定將組件放置在添加此組件之前剛剛添加到容器中的組件的後面。
gridy:指定位於組件顯示區域的頂部的單元格.[默認值為 RELATIVE。gridy 應為非負值。]
其中最上邊的單元格為 gridy=0。值 RELATIVE 指定將組件放置在添加此組件之前剛剛添加到容器中的組件的下面。
gridwidth:指定組件顯示區域的某一行中的單元格數。 [gridwidth 應為非負,默認值為 1。 ]
使用 REMAINDER 指定組件的顯示區域,該區域的範圍是從 gridx 到該行的最後一個單元格。使用 RELATIVE 指定組件的顯示區域,該區域的範圍是從 gridx 到它所在行的倒數第二個單元格。
gridheight:指定在組件顯示區域的一列中的單元格數。 [gridheight 應為非負,默認值為 1。 ]
使用 REMAINDER 指定組件的顯示區域,該區域的範圍是從 gridy 到該列的最後一個單元格。使用 RELATIVE 指定組件的顯示區域,該區域的範圍是從 gridy 到它所在列的倒數第二個單元格。
weightx:指定如何分布額外的水平空間。 [此欄位的默認值為 0。weightx 應為非負值。 ]
格線包布局管理器計算出列的權重將是列的所有組件中最大的 weightx。如果得到的布局在水平方向上比需要填充的區域小,那么系統會將額外的空間按照其權重比例分布到每一列。權重為零的列不會得到額外的空間。
如果所有的權重都為零,則所有的額外空間都將出現在單元格的格線之間和左右邊緣之間。
weighty:指定如何分布額外的垂直空間。 [此欄位的默認值為 0。weighty 應為非負值。]
格線包布局管理器計算出行的權重將是行的所有組件中最大的 weighty。如果得到的布局在垂直方向上比需要填充的區域小,則系統會將額外的空間按照其權重比例分布到每一行。權重為零的行不會得到額外的空間。
如果所有的權重都為零,則所有的額外空間都將出現在單元格的格線之間和上下邊緣之間。
anchor:當組件小於其顯示區域時使用此欄位。它可以確定在顯示區域中放置組件的位置。[默認值為 CENTER。]
可能的值有三種:相對於方向的值、相對於基線的值和絕對值。相對於方向的值是相對於容器的組件方向屬性進行解釋的,相對於基線值是相對於基線進行解釋的,絕對值則不然。絕對值有:CENTER、NORTH、NORTHEAST、EAST、SOUTHEAST、SOUTH、SOUTHWEST、WEST 和 NORTHWEST。方向相對值有:PAGE_START、PAGE_END、LINE_START、LINE_END、FIRST_LINE_START、FIRST_LINE_END、LAST_LINE_START 和 LAST_LINE_END。相對於基線的值有:BASELINE、BASELINE_LEADING、BASELINE_TRAILING、ABOVE_BASELINE、ABOVE_BASELINE_LEADING、ABOVE_BASELINE_TRAILING、BELOW_BASELINE、BELOW_BASELINE_LEADING 和 BELOW_BASELINE_TRAILING。
fill:當組件的顯示區域大於它所請求的顯示區域的大小時使用此欄位。它可以確定是否調整組件大小,以及在需要的時候如何進行調整。[默認值為 NONE。]
以下值適用於 fill:
NONE:不調整組件大小。
HORIZONTAL:加寬組件,使它在水平方向上填滿其顯示區域,但是不改變高度。
VERTICAL:加高組件,使它在垂直方向上填滿其顯示區域,但是不改變寬度。
BOTH:使組件完全填滿其顯示區域。
insets:此欄位指定組件的外部填充,即組件與其顯示區域邊緣之間間距的最小量。 [默認值為 new Insets(0, 0, 0, 0)。]
insets四個參數按順序分別代表上,左,下,右四個方向空出的間距。
ipadx:此欄位指定組件的內部填充,即給組件的最小寬度添加多大的空間。組件的寬度至少為其最小寬度加上 ipadx 像素。 [默認值為 0。 ]
ipady:此欄位指定內部填充,即給組件的最小高度添加多大的空間。組件的高度至少為其最小高度加上 ipady 像素。 [默認值為 0。 ]
示例代碼:
package GUITest;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class GridBagLayoutTest2 {
JPanel panelTop = new JPanel();
private void addButton(String arg0,GridBagLayout gridBag,GridBagConstraints constraints){
JButton BTN = new JButton(arg0);
gridBag.setConstraints(btn, constraints);
panelTop.add(btn);
}
public GridBagLayoutTest2(){
JFrame frm = new JFrame("GridBagLayout Test v1.0");
GridBagLayout gridBag = new GridBagLayout();
panelTop.setLayout(gridBag);
GridBagConstraints constraints = new GridBagConstraints();
constraints.weightx = 1;
constraints.fill = GridBagConstraints.BOTH;
this.addButton("Button0",gridBag,constraints);
this.addButton("Button1",gridBag,constraints);
this.addButton("Button2",gridBag,constraints);
constraints.gridwidth = GridBagConstraints.REMAINDER;
this.addButton("Button3",gridBag,constraints);
this.addButton("Button4",gridBag,constraints);
constraints.gridwidth = GridBagConstraints.RELATIVE;//倒數第二,後邊一定要使用REMAINDER
this.addButton("Button5",gridBag,constraints);
constraints.gridwidth = GridBagConstraints.REMAINDER;//倒數第一,下一個換行。
this.addButton("Button6",gridBag,constraints);
constraints.gridwidth = 1;
constraints.gridheight = 2;
constraints.weighty = 1.0;
this.addButton("Button7",gridBag,constraints);
constraints.weighty = 0.0;
constraints.gridwidth = GridBagConstraints.REMAINDER;
constraints.gridheight = 1;
this.addButton("Button8",gridBag,constraints);
constraints.gridwidth = GridBagConstraints.RELATIVE;
this.addButton("Button9",gridBag,constraints);
this.addButton("Button10",gridBag,constraints);
frm.add(panelTop);
frm.setVisible(true);
frm.setSize(500, 300);
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args){
new GridBagLayoutTest2();
}
}

相關詞條

相關搜尋

熱門詞條

聯絡我們