日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
AWT的幾種布局管理器

AWT中常用的布局管理器有如下幾個:FlowLayout, BorderLayout, GridLayout, GridBagLayout, CardLayout,Swing還提供了一個BoxLayout。

創(chuàng)新互聯(lián)是工信部頒發(fā)資質(zhì)IDC服務(wù)器商,為用戶提供優(yōu)質(zhì)的服務(wù)器主機托管服務(wù)

FlowLayout從左向右排列所有組件,遇到邊界就會折回下一行從新開始。它有三個構(gòu)造器FlowLayout(),F(xiàn)lowLayout(int align)和 FlowLayout(int align, int hgap, int vgap),其中的hgap和vgap代表水平間距和垂直間距,align指的是組件的排列方向(從左向右,從右向左,從中間向兩邊),我們可以使用FlowLayout的靜態(tài)常量來設(shè)置這個參數(shù):FlowLayout.LEFT,F(xiàn)lowLayout.CENTER,F(xiàn)lowLayout.RIGHT。

BorderLayout將容器分為EAST,SOUTH,WEST,NORTH,CENTER五個區(qū)域,如下圖所示:

我們在向使用此布局管理器的容器中添加組件時,需要制定添加到的區(qū)域,否則就默認添加到中間區(qū)域里,而當(dāng)我們向一個區(qū)域添加多個組件時,后放入的組件會覆蓋前面的組件。BorderLayout有兩個構(gòu)造器,BorderLayout()和BorderLayout(int hgap,int vgap),hgap和vgap代表的水平間距和垂直間距。我們在指定組件添加到的區(qū)域時,可以使用它的靜態(tài)常量:BorderLayout.EAST, BorderLayout.WEST, BorderLayout.NORTH, BorderLayout.SOUTH, BorderLayout.CENTER。例如:

 
 
 
 
  1. Frame f = new Frame();  
  2. f.setLayout(new BorderLayout(5,5));  
  3. f.add(new Button(“南”),SOUTH);//將一個按鈕添加到南的位置 

BorderLayout最多只能放5個組件,但是實際上我們可以先在Panel中添加多個組件,再將Panel添加到BorderLayout布局管理器中,因此我們實際可以放的組件要遠遠超過5個。

GridLayout將容器分割成大小相同的網(wǎng)格,我們在添加組件時將默認從左到右從上到下,將組件依次添加到每個網(wǎng)格中,而每個組件的大小也就由其所添加到的網(wǎng)格的大小所決定。GridLayout同樣也有兩個構(gòu)造器,GridLayout(int rows,int cols)和GridLayout(int rows ,int cols,int hgap,int vgap),使用GridLayout的典型例子就是計算器的窗口:

 
 
 
 
  1. import java.awt.*;  
  2. public class calculator  
  3. {  
  4.     public static void main(String[] args)  
  5.     {  
  6.         Frame f = new Frame("計算器");  
  7.         Panel p1 = new Panel();  
  8.         p1.add(new TextField(30));  
  9.         f.add(p1,BorderLayout.NORTH);  
  10.           
  11.         //設(shè)置p2采用GridLayout布局管理器  
  12.         Panel p2 = new Panel();  
  13.         p2.setLayout(new GridLayout(3,5,4,4));  
  14.         String[] name = {"0","1","2","3","4","5","6","7","8","9","+","-","*","/","."};  
  15.         for(int i=0;i
  16.         {  
  17.             p2.add(new Button(name[i]));  
  18.         }  
  19.         f.add(p2);//默認添加到中間  
  20.         f.pack();// 設(shè)置窗口為最佳大小  
  21.         f.setVisible(true);  
  22.     }  

運行結(jié)果如圖:

CardLayout將加入容器的所有組件看成一疊卡片,每次只有最上面的那個Component才可見,它有兩個構(gòu)造器CardLayout()和CardLayout(int hgap, int vgap),有五個方法用來控制其中的組件:

 
 
 
 
  1. first(Container target);//顯示target容器中的第一張卡片  
  2.  
  3. last(Container target);  
  4.  
  5. previous(Container target);  
  6.  
  7. next(Container target);  
  8.  
  9. show(Container target,String name);//顯示targer容器中指定名字的卡片 

例子:

 
 
 
 
  1. import java.awt.*;  
  2. import java.awt.event.ActionEvent;  
  3. import java.awt.event.ActionListener;  
  4. public class calculator  
  5. {  
  6.     Frame f;  
  7.     Panel p1;  
  8.     Panel p2;  
  9.     String[] name = {"1","2","3","4","5"};  
  10.     CardLayout c;  
  11.       
  12.     public void init()  
  13.     {      
  14.         f = new Frame("yz");  
  15.         p1 = new Panel();  
  16.         p2 = new Panel();  
  17.         c = new CardLayout();  
  18.           
  19.         p1.setLayout(c);  
  20.         for(int i=0;i
  21.         {  
  22.             p1.add(name[i],new Button(name[i]));  
  23.         }  
  24.           
  25.         //控制顯示上一張的按鈕  
  26.         Button previous = new Button("上一張");  
  27.         previous.addActionListener(new ActionListener()  
  28.         {  
  29.             public void actionPerformed(ActionEvent e)  
  30.             {  
  31.                 c.previous(p1);  
  32.             }  
  33.         });  
  34.         //控制顯示下一張的按鈕  
  35.         Button next = new Button("下一張");  
  36.         next.addActionListener(new ActionListener()  
  37.         {  
  38.             public void actionPerformed(ActionEvent e)  
  39.             {  
  40.                 c.next(p1);  
  41.             }  
  42.         });  
  43.         //控制顯示第一張的按鈕  
  44.         Button first = new Button("第一張");  
  45.         first.addActionListener(new ActionListener()  
  46.         {  
  47.             public void actionPerformed(ActionEvent e)  
  48.             {  
  49.                 c.first(p1);  
  50.             }  
  51.         });  
  52.         //控制顯示最后一張的按鈕  
  53.         Button last = new Button("最后一張");  
  54.         last.addActionListener(new ActionListener()  
  55.         {  
  56.             public void actionPerformed(ActionEvent e)  
  57.             {  
  58.                 c.last(p1);  
  59.             }  
  60.         });  
  61.         //根據(jù)card名顯示的按鈕  
  62.         Button third = new Button("第三張");  
  63.         third.addActionListener(new ActionListener()  
  64.         {  
  65.             public void actionPerformed(ActionEvent e)  
  66.             {  
  67.                 c.show(p1,"3");  
  68.             }  
  69.         });  
  70.         p2.add(previous);  
  71.         p2.add(next);  
  72.         p2.add(first);  
  73.         p2.add(last);  
  74.         p2.add(third);  
  75.         f.add(p1);//默認添加到中間  
  76.         f.add(p2,BorderLayout.SOUTH);  
  77.         f.pack();  
  78.         f.setVisible(true);  
  79.     }  
  80.     public static void main(String[] args)  
  81.     {  
  82.         new calculator().init();  
  83.     }  

GridBagLayout是功能最強大也是最復(fù)雜的布局管理器,添加到其中的組件可以橫跨一個或多個網(wǎng)格,并可以設(shè)置各網(wǎng)格的大小各不相同,當(dāng)窗口大小發(fā)生變化時,其也可以準(zhǔn)確的控制窗口各部分的反應(yīng)。為了處理GridBagLayout中組件的大小和跨越性,我們還需要一個GridBagConstraints對象,用這個對象與特定的組件相關(guān)聯(lián),來控制組件的大小和跨越性。在使用GridBagLayout時一般需要4步:

1. 創(chuàng)建GridBagLayout,并指定容器使用該布局管理器

 
 
 
 
  1. GridBagLayout gb = new GridBagLayout();  
  2. container.setLayout(gb); 

2. 創(chuàng)建GridBagConstraints的對象,并設(shè)置該對象的相關(guān)屬性

 
 
 
 
  1. GridBagConstraints gbc = new GridBagConstraints();  
  2. gbc.gridx=2;  
  3. gbc.gridy=1;  
  4. gbc.gridwidth=2;  
  5. gbc.gridheight=1; 

3. 調(diào)用GridBagLayout對象的方法來建立GridBagConstraints對象與受控制組件之間的聯(lián)系。

 
 
 
 
  1. gb.setConstraints(c,gbc);//設(shè)置c組件受gbc控制 

4. 添加組件

 
 
 
 
  1. container.add(c); 

通常我們可以將2,3,4步寫成一個addComponent方法,為這個方法傳遞所需要的參數(shù),來進行添加組件的化簡。例如:

 
 
 
 
  1. public void addComponent(Component c, int gx, int gy, int gw,int gh)  
  2. {  
  3.     this.gridx=gx;  
  4.     this.gridy=gy;  
  5.     this.gridwidth=gw;  
  6.     this.gridheight=gh;  
  7.     gb.setConstraints(c,gbc);  
  8.     container.add(c);  

使用GridBagLayout關(guān)鍵在于GridBagConstraints,該類具有如下幾個方法:

fill:設(shè)置組件如何占領(lǐng)空白區(qū)域,它可取如下幾個值:GridBagConstraints.NONE, GridBagConstraints.HORIZONTAL, GridBagConstraints.VERTICAL, GridBagConstraints.BOTH。

gridx,gridy:設(shè)置組件的左上角所在網(wǎng)格的索引(網(wǎng)格的索引從0 開始),此外這兩個值還可以設(shè)為GridBagConstraints.RELATIVE,這個值也是默認值,它表明當(dāng)前組件緊跟在上一個組件之后。

gridwidht和gridheight:設(shè)置組件橫向縱向跨越多少個網(wǎng)格,他們的默認值都是1,如果該組件是橫向或縱向的最后一個還可以將此值設(shè)為GridBagConstraints.REMAINDER,若為倒數(shù)第二個組件則可以設(shè)值為GridBagConstraints.RELATIVE。

ipadx和ipady:設(shè)置組件橫向縱向的內(nèi)部填充大小,即在組件的最小尺寸上還需要增大多少,若設(shè)置了這個值則組件在最小尺寸的基礎(chǔ)上增大ipadx*2或 ipady*2像素。

weightx和weighty(double類型):就是權(quán)重,也就是組件組件占領(lǐng)多余空間的水平或垂直增加比例,默認值為0也就是不占領(lǐng)多余空間。例如有三個組件,我們將他們的水平增加比例分別設(shè)為1.0,2.0,3.0,當(dāng)容器寬度增加60像素時,他們分別增加10,20和30像素。如果我們希望某個組件的大小會隨著容器的變化而變化,我們需要同時設(shè)置fill和weightx,weighty屬性。

Swing中的BoxLayout布局管理器提供了一個構(gòu)造器:BoxLayout(Container targer,int axis),它制定創(chuàng)建基于targer容器的BoxLayout布局管理器,它里面的組件按axis方向排列,axis有BoxLayout.X_AXIS和BoxLayout.Y_AXIS兩個方向。BoxLayout通常和Box容器結(jié)合使用,Box容器有點像Panel,它默認使用BoxLayout布局管理器。Box有兩個靜態(tài)方法來創(chuàng)建Box對象:createHorizontalBox()和createVerticalBox(),一旦獲得了Box容器之后,就可以使用Box來承裝普通GUI組件,然后再將這些Box組件添加到其他容器中,從而形成整體的窗口布局。例如:

 
 
 
 
  1. public class Test  
  2. {  
  3.     private Frame f = new Frame("cs");  
  4.     private Box horizontal = Box.createHorizontalBox();  
  5.     private Box vertical = Box.createVerticalBox();  
  6.     public void init()  
  7.     {  
  8.         horizontal.add(new Button("shuiping1"));  
  9.         horizontal.add(new Button("shuiping2"));  
  10.         vertical.add(new Button("chuizhi1"));  
  11.         vertical.add(new Button("chuizhi2"));  
  12.         f.add(horizontal, BorderLayout.NORTH);  
  13.         f.add(vertical);  
  14.         f.pack();  
  15.         f.setVisible(true);  
  16.     }  
  17.     public static void main(String[] args)  
  18.     {  
  19.         new Test().init();  
  20.     }  

最后我們還可以使用絕對定位:只需要將Container的布局管理器設(shè)為null即可,也就是setLayout(null),往容器中加組件的時候指定組件的位置和大小。一般調(diào)用setBounds(int x,int y,int width,int height)。


分享名稱:AWT的幾種布局管理器
URL分享:http://m.5511xx.com/article/cdghsds.html