Java_GUI中GridBagLayout佈局使用詳解
阿新 • • 發佈:2019-01-30
- GridBagLayout以表格形式佈置容器內的元件, 將每個元件放置在每個單元格內,而一個單元格可以跨越多個單元格合併成一個單元格,即多個單元格可以組合成一個單元格,從而實現元件的自由佈局。
- 每一個單元格都有各自的屬性,而這些屬性由GridBagConstrainsts類的成員變數來定義,且GridBagConstriaints中的所有成員變數都是public的。
- 建構函式:
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物件,並指定其引數的值。 - 下面提供一個用來設定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;
}
}
- 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));
}
}