Java FlowLayout、BorderLayout、GridLayout、GridBagLayout、CardLayout布局管理器

來源:互聯網
上載者:User

標籤:style   blog   http   io   ar   os   使用   java   sp   

卿篤軍

原文地址:http://blog.csdn.net/qingdujun/article/details/40985027


一、FlowLayout布局管理器

FlowLayout()
構造一個新的 FlowLayout,它是置中對齊的,預設的水平和垂直間隙是 5 個單位。

FlowLayout(int align)
構造一個新的 FlowLayout,它具有指定的對齊,預設的水平和垂直間隙是 5 個單位。

FlowLayout(int align, int hgap, int vgap)
建立一個新的流布局管理器,它具有指定的對齊以及指定的水平和垂直間隙。

package flowlayout.dolphin.awt;import java.awt.Button;import java.awt.FlowLayout;import java.awt.Frame;public class FlowLayoutTest {public static void main(String[] args) {// TODO 自動產生的方法存根Frame f = new Frame("FlowLayoutTest");f.setLayout(new FlowLayout(FlowLayout.LEFT,20,5));for (int i = 0; i < 10; ++i){f.add(new Button("按鈕"+i));}//設定視窗為最佳大小f.pack();f.setVisible(true);}}


二、BorderLayout布局管理器

       這是一個布置容器的邊框布局,它可以對容器組件進行安排,並調整其大小,使其符合下列五個地區:北、南、東、西、中。每個地區最多隻能包含一個組件,並通過相應的常量進行標識:NORTH、SOUTH、EAST、WEST、CENTER。

package borderlayout.dolphin.awt;import java.awt.BorderLayout;import java.awt.Button;import java.awt.Frame;public class BorderLayoutTest {public static void main(String[] args) {// TODO 自動產生的方法存根Frame f = new Frame("FlowLayoutTest");f.setLayout(new BorderLayout(30,5));f.add(new Button("南"),BorderLayout.SOUTH);f.add(new Button("北"),BorderLayout.NORTH);f.add(new Button("中"));f.add(new Button("東"),BorderLayout.EAST);f.add(new Button("西"),BorderLayout.WEST);//設定視窗為最佳大小f.pack();f.setVisible(true);}}

package borderlayout.dolphin.awt;import java.awt.BorderLayout;import java.awt.Button;import java.awt.Frame;import java.awt.Panel;import java.awt.TextField;public class BorderLayoutTest {public static void main(String[] args) {// TODO 自動產生的方法存根Frame f = new Frame("BorderLayoutTest");f.setLayout(new BorderLayout(30,5));f.add(new Button("南"),BorderLayout.SOUTH);f.add(new Button("北"),BorderLayout.NORTH);Panel p = new Panel();p.add(new TextField(20));p.add(new Button("點擊"));//預設添加到中間地區f.add(p);f.add(new Button("東"),BorderLayout.EAST);//設定視窗為最佳大小f.pack();f.setVisible(true);}}


三、GridLayout布局管理器

GridLayout();
GridLayout(int rows,int cols);
GridLayout(int rows,int cols,int hgap,int vgap);
建立一個表格的版面對象。rows代表有幾行,cols代表有幾列;hgap是組件之間的水平距離,vgap是組件之間的豎直距離。

package gridlayout.dolphin.awt;import java.awt.BorderLayout;import java.awt.Button;import java.awt.Frame;import java.awt.GridLayout;import java.awt.Panel;import java.awt.TextField;public class GridLayoutTest {public static void main(String[] args) {// TODO 自動產生的方法存根Frame f = new Frame("GridLayoutTest");Panel p1 = new Panel();p1.add(new TextField(30));//預設為BorderLayout布局f.add(p1, BorderLayout.NORTH);Panel p2 = new Panel();p2.setLayout(new GridLayout(3,5,4,4));String[] name = {"0","1","2","3","4","5","6","7","8","9","+","-","*","/","."};for (int i = 0; i < name.length; ++i){p2.add(new Button(name[i]));}//預設添加在中部f.add(p2);//設定視窗為最佳大小f.pack();f.setVisible(true);}}


四、GridBagLayout布局管理器

       要使用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 gridbaglayout.dolphin.awt;import java.awt.Button;import java.awt.Frame;import java.awt.GridBagConstraints;import java.awt.GridBagLayout;public class GridBagLayoutTest {public static void main(String[] args) {// TODO 自動產生的方法存根Frame f = new Frame("GridBagLayoutTest");GridBagLayout gb = new GridBagLayout();GridBagConstraints gbc = new GridBagConstraints();Button[] bs = new Button[10];f.setLayout(gb);for (int i = 0; i < bs.length; ++i){bs[i] = new Button("按鈕"+i);}//所有組件都可以在橫向、縱向擴大gbc.fill = GridBagConstraints.BOTH;gbc.weightx = 1;gb.setConstraints(bs[0], gbc);f.add(bs[0]);gb.setConstraints(bs[1], gbc);f.add(bs[1]);gb.setConstraints(bs[2], gbc);f.add(bs[2]);//該GridBagConstraints控制的GUI組件將會成為橫向最後一個組件gbc.gridwidth = GridBagConstraints.REMAINDER;gb.setConstraints(bs[3], gbc);f.add(bs[3]);//該GridBagConstraints控制的GUI組件將在橫向不會擴大gbc.weightx = 0;gb.setConstraints(bs[4], gbc);f.add(bs[4]);//該GridBagConstraints控制的GUI組件將橫跨兩個網格gbc.gridwidth = 2;gb.setConstraints(bs[5], gbc);f.add(bs[5]);//該GridBagConstraints控制的GUI組件將橫跨一個網格gbc.gridwidth = 1;//該GridBagConstraints控制的GUI組件將縱跨兩個網格gbc.gridheight = 2;//該GridBagConstraints控制的GUI組件將會成為橫向最後一個組件gbc.gridwidth = GridBagConstraints.REMAINDER;gb.setConstraints(bs[6], gbc);f.add(bs[6]);//該GridBagConstraints控制的GUI組件將橫向跨一個網格,縱向跨兩個網格gbc.gridwidth = 1;gbc.gridheight = 2;//該GridBagConstraints控制的GUI組件縱向擴大的權重是1gbc.weighty = 1;gb.setConstraints(bs[7], gbc);f.add(bs[7]);//設定下面的按鈕在縱向不會擴大gbc.weighty = 0;//該GridBagConstraints控制的GUI組件將會成為橫向最後一個組件gbc.gridwidth = GridBagConstraints.REMAINDER;//該GridBagConstraints控制的GUI組件將縱向跨一個網格gbc.gridheight = 1;gb.setConstraints(bs[8], gbc);f.add(bs[8]);gb.setConstraints(bs[9], gbc);f.add(bs[9]);f.pack();f.setVisible(true);}}


五、CardLayout布局管理器

       CardLayout布局管理器以時間而非空間來管理它裡面的組件,它將加入容器的所有組件看成一疊卡片,每次只要最上面的那個Component才可見。就好像一副撲克牌,它們疊在一起,每次只有最上面的一張撲克牌可見。

CardLayout提供了如下兩個構造器:

1)CardLayout():建立預設的CardLayout布局管理器。

2)CardLayout(int hgap,int vgap):通過指定卡片與容器左右邊界的間距(hgap)、上下邊界(vgap)的間距來建立CardLayout布局管理器。

CardLayout用於控制組件可見的5個常用方法:

1)first(Container target):顯示target容器中的第一個卡片。

2)last(Container target):顯示target容器中的最後一個卡片。

3)previous(Container target):顯示target容器中前一個卡片。

4)next(Container target):顯示target容器中下一個卡片。

5)show(Container target,String name):顯示target容器中指定名字的卡片。

package cardlayout.dolphin.awt;import java.awt.BorderLayout;import java.awt.Button;import java.awt.CardLayout;import java.awt.Frame;import java.awt.Panel;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;public class CardLayoutTest {public static void main(String[] args) {// TODO 自動產生的方法存根Frame f = new Frame("CardLayoutTest");String[] names = {"第一張","第二張","第三張","第四張","第五張"};final CardLayout c = new CardLayout();final Panel p1 = new Panel();p1.setLayout(c);for (int i = 0; i < names.length; ++i){p1.add(names[i], new Button(names[i]));}Panel p2 = new Panel();//控制顯示上一張按鈕Button btn_Pre = new Button("上一張");btn_Pre.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){c.previous(p1);}});//控制顯示下一張按鈕Button btn_Next = new Button("下一張");btn_Next.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){c.next(p1);}});//控制顯示第一張按鈕Button btn_First = new Button("第一張");btn_First.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){c.first(p1);}});//控制顯示最後一張按鈕Button btn_Last = new Button("最後一張");btn_Last.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){c.last(p1);}});//控制顯示最後一張按鈕Button btn_3rd = new Button("第三張");btn_3rd.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){c.show(p1,"第三張");}});p2.add(btn_Pre);p2.add(btn_Next);p2.add(btn_First);p2.add(btn_Last);p2.add(btn_3rd);f.add(p1);f.add(p2,BorderLayout.SOUTH);f.pack();f.setVisible(true);}}


原文地址:http://blog.csdn.net/qingdujun/article/details/40985027

參考文獻:1)瘋狂Java講義(第2版) 李剛 編著

2)百度百科,GridBagConstraint,http://baike.baidu.com/view/1966330.htm,2014年11月10日20:53:27

3)百度百科,FlowLayout,http://baike.baidu.com/view/6762091.htm,2014年11月10日20:53:55

4)百度百科,BorderLayout,http://baike.baidu.com/view/7097482.htm,2014年11月10日20:54:17

5)百度百科,GridLayout,http://baike.baidu.com/view/10481980.htm,2014年11月10日20:54:41

6)小不點的網易部落格,布局管理器,http://blog.163.com/[email protected]/blog/static/68847725201261851041680/,2014年11月10日20:55:33 


Java FlowLayout、BorderLayout、GridLayout、GridBagLayout、CardLayout布局管理器

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.