电竞比分网-中国电竞赛事及体育赛事平台

分享

01布局管理器

 靜聽沙漏 2012-01-11
LayoutManager:管理組件的擺放(父類)
1、BorderLayout:邊界布局
組件被置于容器的中、東、南、西、北的位置。
在邊界布局的容器中加入組件的方法是:
add ( Component cmp , int location ) ;//其中參數(shù)location是用來指定組件加入位置的常數(shù)

BorderLayout.NORTH :容器的頂部
BorderLayout.EAST :容器的右邊
BorderLayout.SOUTH :容器的底部
BorderLayout.WEST :容器的左邊
BorderLayout.CENTER :容器的中部
例:
public static void main(String[] args) {
Frame frame = new Frame();?
frame.add(new Button("上"),BorderLayout.NORTH);
frame.add(new Button("下"),BorderLayout.SOUTH);
frame.add(new Button("左"),BorderLayout.WEST);
frame.add(new Button("右"),BorderLayout.EAST);
frame.add(new Button("中"),BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
拉大窗體的時候,處在center(中間)的組件就不斷擠壓東西南北四個方向的組件, “Button左”和“Button右”只是拉高而寬度不變,而“Button上”和“Button下”只是拉寬,而高度不變,”Button中”則是高、寬都變化 。

2、FlowLayout:流式布局
FlowLayout(流式布局)是小應(yīng)用程序(Applet)和面板(Panel)的默認(rèn)布局管理器。
組件自左上角開始,按照從左到右、從上到下的方式排列。
構(gòu)造:
FlowLayout() :建立一個新的FlowLayout,此FlowLayout默認(rèn)為居中對齊,而且組件彼此之間有5單位 的水平與垂直間距 。
FlowLayout(int align):建立一個新的FlowLayout,此FlowLayout可設(shè)置排列方式,而且組件彼此之間有5單位的水平與垂直間距 。
FlowLayout(int align , int hgap ,int vgap):建立一個新的FlowLayout,此FlowLayout可設(shè)置排列方式與組件間距 。
例:
public static void main(String[] args) {
Frame frame = new Frame();
frame.setLayout(new FlowLayout()); //將框架布局設(shè)為流式布局
frame.setBounds(100, 100, 160, 70);
Button button1 = new Button("Suivante");
frame.add(button1);?
Button button2 = new Button("Precedente");
frame.add(button2);?
frame.setVisible(true);
}
在查詢每個控件的首選大小之后,布局管理器根據(jù)可用空間設(shè)置每個控件的位置??丶亩ㄎ蛔屗鼈儾粫ハ嘀丿B。當(dāng)窗口變大時, FlowLayout 在可用空間的中心重新定位控件。如果沒有足夠的空間并排放置控件,布局管理器會將其上下排列 。
因?yàn)榭丶旧淼拇笮『臀恢脮鶕?jù)其中包含的文本而增大或縮小。如果控件對窗口來說變得太大,就會被截斷;如果它變得太小,周圍的就會有多余空間。
pack() 方法 :
為了防止由于窗體被調(diào)整的過小,而使控件被截斷的現(xiàn)象發(fā)生,Window 組件提供 pack() 方法來解決這個問題 。

frame.pack();

Frame對象會調(diào)整自身大小,讓其中的控件不會被剪切,即窗體保持一個最小的尺寸來防止控件被剪切。

3、GridLayout:網(wǎng)格布局
網(wǎng)格布局管理器是將組件放置到由行和列組成的網(wǎng)格中 。
首先,組件被加入到網(wǎng)格的第一行,并從最左邊的單元格開始,依次向右排列。
第一行的單元格排滿后,接下來的組件將加入到第二行最左邊的單元格中(如果有第二行的話),并以此類推。
構(gòu)造:
GridLayout():創(chuàng)建一個只有一行一列的缺省網(wǎng)格布局 。
GridLayout(int rows , int cols):創(chuàng)建一個有指定行數(shù)和指定烈數(shù)的網(wǎng)格布局 。
GridLayout(int rows , int cols , int hgap , int vgap):創(chuàng)建一個有指定行數(shù)和指定烈數(shù),并指定組件之間的水平和垂直間隔的網(wǎng)格布局 。
例:
public static void main(String[] args) {

Frame frame = new Frame();
frame.setLayout(new GridLayout(3,3));
for(int i = 0; i < 9; i++){
frame.add(new Button(i+1+""));
}
frame.pack();
frame.setVisible(true);
}
如果將上例的設(shè)置窗體布局的語句改成以下語句:
frame.setLayout(new GridLayout(3,3,5,2)); //設(shè)置了格與格之間的距離

4、GridBagLayout:網(wǎng)格包布局
約束布局管理器:約束布局管理器有一個與其關(guān)聯(lián)的約束對象(添加到容器中的組件)。
無論組件在何時被添加到容器中,都是通過一個約束對象來完成,這個對象可以被看成是一個布局提示。
GridBagLayout 是約束布局管理器的一個示例,它有約束對象 GridBagConstraints 。
GridBagLayout 讓我們將窗口分成一系列邏輯的行和列。
GridBagConstraints對象是向 frame添加每個組件的add(Component,Object)方法的第二個參數(shù)。
GridBagConstraints類的成員變量說明:
gridx、gridy:設(shè)置組件的位置,當(dāng)gridx為GridBagConstraints.RELATIVE代表此組件位于之前所加入組件的右邊。若將gridy設(shè)置為GridBagConstraints.RELATIVE代表此組件位于以前所加入組件的下面。如要表示放在具體的幾行幾列,gridx=0,gridy=0時放在0行0列。
gridwidth、gridheight:用來設(shè)置組件所占的單位長度與高度,默認(rèn)值皆為1。你可以使用
GridBagConstraints.REMAINDER常量,代表此組件為此行或此列的最后一個組件,而且會占據(jù)所有剩余的空間。
weightx,weighty:用來設(shè)置窗口變大時,各組件跟著變大的比例,當(dāng)數(shù)字越大,表示組件能得到更多的空間,默認(rèn)值皆為0。
anchor:當(dāng)組件空間大于組件本身時,要將組件置于何處,有CENTER(默認(rèn)值)、NORTH、
NORTHEAST、EAST、SOUTHEAST、WEST、NORTHWEST可供選擇。
fill:指定在單元大于組件的情況下,組件如何填充此單元。缺省為保持組件的大小。有NONE(不改變)、HORIZONTAL(水平填充顯示區(qū)域)、VERTICAL(垂直填充顯示區(qū)域)、BOTH(是組件填充整個顯示區(qū)域)
insets:設(shè)置組件之間彼此的間距,它有四個參數(shù),分別是上,左,下,右,默認(rèn)為(0,0,0,0)。
ipadx,ipady:設(shè)置組件的最小高度和寬度,默認(rèn)值為0。

5、CardLayout:卡片布局
CardLayout布局的功能就如同你有很多張卡片疊在一起,你一次只能看到其中一張卡片,但是你可以任意抽出其中一張卡片來看。
構(gòu)造:
CardLayout() 創(chuàng)建一個只有一行一列的缺省網(wǎng)格布局 。
CardLayout(int hgap ,int vgap) 創(chuàng)建一個有指定行數(shù)和指定烈數(shù),并指定組件之間的水平和垂直間隔的網(wǎng)格布局 。

實(shí)現(xiàn)CardLayou的過程:
定義面板,為各個面板設(shè)置不同的布局,并根據(jù)需要在每個面板中放置組件。
Panel1.setLayout ( new FlowLayout () );
Panel2.setLayout ( new BorderLayout () );
將主面板的布局設(shè)為:CardLayout。
CardLayout card = new Cardlayout();
PanelMain.setLayout ( new CardLayout() );
將作為卡片的面板添加到主面板。
(Add的第一個參數(shù)是給卡片指定標(biāo)題)
PanelMain.add ( “第一張卡片”, panel1 );
PanelMain.add ( “第二張卡片”, panel2 );
供在卡片之間進(jìn)行選擇的方法。通常的方法是在由某種事件引起的行為中中決定顯示哪張卡片。(如按鈕單擊事件)
(書中示例2-8提供了一個比較復(fù)雜的示例,需要仔細(xì)研讀)

6、null:空布局
窗口改變大小,內(nèi)容不變
組件方法:
setBounds(x,y,寬,高); //設(shè)置組件位置、大小
this.setLayout(null); //設(shè)為空布局
lable.setOpaque(true); //標(biāo)簽背景設(shè)為不透明,默認(rèn)透明

來自: http://hi.baidu.com/xgrils/blog/item/4ee482eeb90422f2b2fb9583.html

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多