GridLayout的類層次結構圖:
java.lang.Object
--java.awt.GridLayout
GridLayout比FlowLayout多了行和列的設置,也就是說妳要先設置GridLayout***有幾行
幾列,就如同二維平面壹般,然後妳加
進去的組件會先填第壹行的格子,然後再從第二行開始填,依此類扒,就像是壹個個的
格子壹般。而且GridLayout會將所填進去組
件的大小設為壹樣。
構造函數:GridLayout()建立壹個新的GridLayout,默認值是1行1列。
GridLayout(int rows,int
cols)建立壹個幾行幾列的GridLayout.
GridLayout(int rows,int cols, int hgap,int
vgap)建立壹個幾行幾列的GridLayout,並設置組件的間距。
例子:GridLayoutDemo.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class CardLayoutDemo implements ActionListener{
JPanel p1,p2,p3,p4;
int i=1;
JFrame f;
public CardLayoutDemo(){
f=new JFrame();//當做top-level組件
Container contentPane=f.getContentPane();
contentPane.setLayout(new GridLayout(2,1));
p1=new JPanel();
Button b=new Button("Change Card");
b.addActionListener(this);//當按下"Change
Card"時,進行事件監聽,將會有系統操作產生。
p1.add(b); file://處理操作在52-64行.
contentPane.add(p1);
p2=new JPanel();
p2.setLayout(new FlowLayout());
p2.add(new JButton("first"));
p2.add(new JButton("second"));
p2.add(new JButton("third"));
p3=new JPanel();
p3.setLayout(new GridLayout(3,1));
p3.add(new JButton("fourth"));
p3.add(new JButton("fifth"));
p3.add(new JButton("This is the last button"));
p4=new JPanel();
p4.setLayout(new CardLayout());
p4.add("one",p2);
p4.add("two",p3);
/*要顯示CardLayout的卡片,除了用show(Container parent,String
name)這個方法外
*,也可試試first(Container),next(Container),previous(Container),last
(Container)這
*四個方法,壹樣可以達到顯示效果。
*/
((CardLayout)p4.getLayout()).show(p4,"one");
contentPane.add(p4);
f.setTitle("CardLayout");
f.pack();
f.setVisible(true);
f.addWindowListener(
new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
}
);
}
public void actionPerformed(ActionEvent event){
switch(i){
case 1:
((CardLayout)p4.getLayout()).show(p4,"two");
break;
case 2:
((CardLayout)p4.getLayout()).show(p4,"one");
break;
}
i++;
if (i==3) i=1;
f.validate();
}
public static void main(String[] args){
new CardLayoutDemo();
}
}
1-3-5:GridBagLayout的使用:是java中最有彈性但也是最復雜的壹種版面管理器。它
只有壹種構造函數,但必須配合
GridBagConstraints才能達到設置的效果。
GridBagLayout的類層次結構圖:
java.lang.Object
--java.awt.GridBagLayout
構造函數:
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對象
,並指定其參數的值。
參數說明:
gridx,gridy:設置組件的位置,gridx設置為GridBagConstraints.RELATIVE代表此組件
位於之前所加入組件的右邊。
若將gridy設置為GridBagConstraints.RELATIVE代表此組件位於以前所加入組件的下
面。建議定義出
gridx,gridy的位置,以便以後維護程序。表示放在幾行幾列,gridx=0,gridy=0時放在
0行0列。
gridwidth,gridheight:用來設置組件所占的單位長度與高度,默認值皆為1。妳可以使
用GridBagConstraints.REMAINDER常
量,代表此組件為此行或此列的最後壹個組件,而且會占據所
有剩余的空間。
weightx,weighty:用來設置窗口變大時,各組件跟著變大的比例,當數字越大,表示組
件能得到更多的空間,默認值皆為0。
anchor:
當組件空間大於組件本身時,要將組件置於何處,有CENTER(默認值)、NORTH、
NORTHEAST、EAST、SOUTHEAST、
WEST、NORTHWEST可供選擇。
insets:設置組件之間彼此的間距,它有四個參數,分別是上,左,下,右,默認為
(0,0,0,0).
ipadx,ipady:設置組件內的間距,默認值為0。
我們以前提過,GridBagLayout裏的各種設置都必須通過GridBagConstraints,因此當我
們將GridBagConstraints的參數都設置
好了之後,必須new壹個GridBagConstraints的對象出來,以便GridBagLayout使用。
例子:
GridBagLayoutDemo.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class GridBagLayoutDemo{
public GridBagLayoutDemo(){
JButton b;
GridBagConstraints c;
int
gridx,gridy,gridwidth,gridheight,anchor,fill,ipadx,ipady;
double weightx,weighty;
Insets inset;
JFrame f=new JFrame();
GridBagLayout gridbag=new GridBagLayout();
Container contentPane=f.getContentPane();
contentPane.setLayout(gridbag);
b=new JButton("first");
gridx=0;
gridy=0;
gridwidth=1;
gridheight=1;
weightx=10;
weighty=1;
anchor=GridBagConstraints.CENTER;
fill=GridBagConstraints.HORIZONTAL;
inset=new Insets(0,0,0,0);
ipadx=0;
ipady=0;
c=new
GridBagConstraints(gridx,gridy,gridwidth,gridheight,weightx,weighty,anchor,
fill,inset,ipadx,ipady);
gridbag.setConstraints(b,c);
contentPane.add(b);
b=new JButton("second");
gridx=1;
gridy=0;
gridwidth=2;
gridheight=1;
weightx=1;
weighty=1;
anchor=GridBagConstraints.CENTER;
fill=GridBagConstraints.HORIZONTAL;
inset=new Insets(0,0,0,0);
ipadx=50;
ipady=0;
c=new
GridBagConstraints(gridx,gridy,gridwidth,gridheight,weightx,weighty,anchor,
fill,inset,ipadx,ipady);
gridbag.setConstraints(b,c);
contentPane.add(b);
b=new JButton("third");
gridx=0;
gridy=1;
gridwidth=1;
gridheight=1;
weightx=1;
weighty=1;
anchor=GridBagConstraints.CENTER;
fill=GridBagConstraints.HORIZONTAL;
inset=new Insets(0,0,0,0);
ipadx=0;
ipady=50;
c=new
GridBagConstraints(gridx,gridy,gridwidth,gridheight,weightx,weighty,anchor,
fill,inset,ipadx,ipady);
gridbag.setConstraints(b,c);
contentPane.add(b);
b=new JButton("fourth");
gridx=1;
gridy=1;
gridwidth=1;
gridheight=1;
weightx=1;
weighty=1;
anchor=GridBagConstraints.CENTER;
fill=GridBagConstraints.HORIZONTAL;
inset=new Insets(0,0,0,0);
ipadx=0;
ipady=0;
c=new
GridBagConstraints(gridx,gridy,gridwidth,gridheight,weightx,weighty,anchor,
fill,inset,ipadx,ipady);
gridbag.setConstraints(b,c);
contentPane.add(b);
b=new JButton("This is the last button");
gridx=2;
gridy=1;
gridwidth=1;
gridheight=2;
weightx=1;
weighty=1;
anchor=GridBagConstraints.CENTER;
fill=GridBagConstraints.HORIZONTAL;
inset=new Insets(0,0,0,0);
ipadx=0;
ipady=50;
c=new
GridBagConstraints(gridx,gridy,gridwidth,gridheight,weightx,weighty,anchor,
fill,inset,ipadx,ipady);
gridbag.setConstraints(b,c);
contentPane.add(b);
f.setTitle("GridBagLayout");
f.pack();
f.setVisible(true);
f.addWindowListener(
new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
}
);
}
public static void main(String[] args){
new GridBagLayoutDemo();
}
}