Java Swing學習筆記——GUI佈局管理器

進行過java GUI編程的人一定都接觸過佈局管理器,最近研究了一下,寫下總結供初學者參考~

GUI佈局管理器大致可以分爲三種 BorderLayout,FlowLayout,GridLayout

1.BorderLayout

將容器分爲北、南、西、東和中心五個部分(叫法和看地圖一樣,上北下南左西右東),可以根據界面的需要將空間放置在容器的特定位置:

使用實例:

   JPanel panel1=(JPanel)getContentPane();
   panel1.setLayout(new BorderLayout());

 

   JButton north=new JButton("North");
   JButton south=new JButton("South");
   JButton east=new JButton("East");
   JButton west=new JButton("West");
   JButton center=new JButton("Center");

   panel1.add(north,BorderLayout.NORTH);
   panel1.add(south,BorderLayout.SOUTH);
   panel1.add(east,BorderLayout.EAST);
   panel1.add(west,BorderLayout.WEST);
   panel1.add(center,BorderLayout.CENTER);


 

2.FlowLayout顧名思義,“流佈局”,也是java GUI的默認佈局管理器,將各個控件依次擺放到容器中:

3.GridLayout網格佈局,將容器分爲相等大小的網格,將空間放入指定網格內

4.GridBagLayout佈局管理器,也是Java中最強大的佈局管理器,在此着重介紹:

   GridBagLayout不像網格佈局一相,需要所有的部件的大小、形狀相同。而且還可以將某一個部件放在一個固定的位置上

通過一個例子來介紹:

 

  JPanel panel1=(JPanel)getContentPane();
   panel1.setLayout(new GridBagLayout());
   GridBagConstraints gbdc=new GridBagConstraints();
   
   gbdc.fill = GridBagConstraints.BOTH;
   
   gbdc.weightx=0;
   panel1.add(new JButton("No.1"),gbdc);
   
   gbdc.weightx=2;
   panel1.add(new JButton("No.2"),gbdc);
   
   gbdc.weightx=3;
   panel1.add(new JButton("No.3"),gbdc);
   setSize(300,200);


 

GridBagLayout佈局管理器是通過一個GridBagConstraints類來實現效果的。所以,我們要在使用時先定義一個GridBagConstraints類的對象。在這個程序中,我們定義了一個GridBagConstraints類的對象gbdc。

理解GridBagConstraints的各個參數至關重要:

1. gbdc.fill=GridBagConstraints.BOTH 用來指定當“控件小於格子時”,是否將控件“拉伸”?

     ¨ GridBagConstraints.NONE:不擴張,是默認值;
    ¨ GridBagConstraints.HORIZONTAL:部件水平擴張,將水平方向的多餘空間填滿;
    ¨ GridBagConstraints.VERTICAL:部件垂直擴張,將垂直方向的多餘空間填滿;
    ¨ GridBagConstraints.BOTH:部件同時向兩個方向擴張,將單元格填滿。

2.gridwidth和gridheight ,控件在橫向和縱向所佔的格子數量(不做更多解釋)

3.weightx和weighty控件的“權重”?(最難理解的兩個屬性),此兩個屬性說白了,就是用於分配“容器中剩餘空間”的,所謂剩餘空間,比如說,當你拉伸一個panel在橫向增加了100釐米,橫向上有3個控件,他們的weightx值依次是0,2,3,那麼這100釐米的寬度將如何分配到三個控件所在的格子上呢?

控件1分配 = 0/(0 + 2 + 3) =0/5        

控件2分配 = 2/(0 + 2 + 3) =2/5

控件2分配 = 3/(0 + 2 + 3) =3/5

那麼這100釐米就按照這個比例附加到三個控件的格子

請將下面的兩個程序運行起來,將註釋部分打開再次運行,同時放大縮小窗體看效果即可理解~

package test;
import java.awt.*;
import javax.swing.*;
import java.applet.Applet;

public class test extends JApplet
{
  
  public void init()
  { 
   JPanel panel1=(JPanel)getContentPane();
   panel1.setLayout(new GridBagLayout());
   GridBagConstraints gbdc=new GridBagConstraints();
   
   gbdc.fill = GridBagConstraints.BOTH;
   
//   gbdc.weightx=0;
   gbdc.gridwidth=1;
   panel1.add(new JButton("No.1"),gbdc);
   
//   gbdc.weightx=1;
   gbdc.gridwidth=1;
   panel1.add(new JButton("No.2"),gbdc);
   
//   gbdc.weightx=2;
   gbdc.gridwidth=1;
   panel1.add(new JButton("No.3"),gbdc);
  }
}


 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章