6.6版面管理員:LayoutManager
當我們將一個元件加到Applet(或是任何Container)上,
該Applet會使用它的layout
manager 決定要將元件放置的位置。
java.awt.LayoutManager是一個界面元件 . 下列5個版面配置物件類別都安裝(繼承)這個界面元件 :
FlowLayout
BorderLayout
CardLayout
GridLayout
GridBagLayout
FlowLayout是最基本的 版面配置元件,Applet和Panel內定的版面配置就是FlowLayout。它將元件由左到右依序(依加入的先後順序)排列,單行放不下的元件會移到下一行。
BorderLayout可將元件放置在 Applet的North, South, East, West和Center等五個位置。
CardLayout 將一個Applet是為一組重疊的版面,每個版面擁有自己的LayoutManager,但一次只能顯示一個版面。
GridLayout的元件擺置方式是將 Applet切割成grids table,每一個grid都具有相同的寬度和高度。元件由左到右、由上到下依序(依加入的先後順序)排列。
GridBagLayout類似GridLayout ,但多出兩項功能:
1. 每一個grid可以擁有自己的寬度和高度。
2. 元件擺放的位置可以由設計者指定,而不一定依鍵入先後順序由左到右、由上到下排列。
FlowLayout版面
使用範例:
FlowLayout fl;
fl = new FlowLayout();
或
FlowLayout fl
= new FlowLayout();
在Applet程式中,直接將FlowLayout元件傳入 Applet的成員函式setLayout()中 :
this.setLayout(fl);
最精簡的寫法:
this.setLayout(new
FlowLayout());
FlowLayout的切齊功能
this.setLayout(new FlowLayout(FlowLayout.LEFT)); //向左切齊
this.setLayout(new FlowLayout(FlowLayout.RIGHT)); //向右切齊
this.setLayout(new FlowLayout(FlowLayout.CENTER)); //中間切齊
中間切齊範例
設定元件在FlowLayout上彼此間的間隔
public FlowLayout(int
alignment, int hspace, int vspace);
例:
FlowLayout fl = new FlowLayout(FlowLayout.LEFT, 20, 10);//單位:pixel
範例6.6.1:
import java.applet.*;
import java.awt.*;
public class SpaceTapeDeck extends Applet
{
public void init()
{
this.setLayout( new FlowLayout(FlowLayout.LEFT, 20, 10));
this.add( new Button("Play"));
this.add( new Button("Rewind"));
this.add( new Button("Fast Forward"));
this.add( new Button("Pause"));
this.add( new Button("Stop"));
}
}
結果瀏覽:
BorderLayout
BorderLayout可將元件放置在 Applet的North, South, East, West和Center等五個位置。
BorderLayout的使用模式如同 FlowLayout ,如
this.setLayout(new BorderLayout());
BorderLayout沒有切齊的功能 ,但可以設定水平和垂直間隔,如
this.setLayout(new BorderLayout(5, 10));
將元件加入 BorderLayout的特定位置 如下:
this.add("South", new Button("Start"));
範例6.6.2:
import java.applet.*;
import java.awt.*;
public class BorderLayout1 extends Applet
{
public void init()
{
setLayout( new BorderLayout(10, 5));
add("South", new Button("南1"));
add("South", new Button("南2"));
add("North", new Button("北"));
add("East", new Button("東"));
add("West", new Button("西"));
}
}
結果瀏覽:
CardLayout
CardLayout 將一個Applet是為一組重疊的版面,每個版面擁有自己的LayoutManager,但一次只能顯示一個版面。
CardLayouts使用模式
this.setLayout(new CardLayout());//建構一個CardLayout並植入Applet
或
this.setLayout(new CardLayout(3, 4));//設定水平和垂直的間隙寬度
每一個card都有一個名稱.當一個GUI元件被加(使用add成員函式)到一個新的card名稱,此一card會自動產生
。如下例將產生3個card:
this.setLayout(new CardLayout());
this.add("Pizza", new Label("How do you like your pizza?"));
this.add("Pizza", new Button("OK"));
this.add("Payment", new Label("How would you like to pay?"));
this.add("Payment", new Button("OK"));
this.add("Address", new Label("Delivery Instructions"));
this.add("Address", new Button("Order"));
下例則產生5個card :
this.setLayout(new CardLayout());
this.add("1", new Label("First Card"));
this.add("2", new Label("Second Card"));
this.add("3", new Label("Third Card"));
this.add("4", new Label("Fourth Card"));
this.add("5", new Label("Fifth Card"));
this.add("6", new Label("Sixth Card"));
切換不同的Card
public void first(Container parent)
public void next(Container parent)
public void previous(Container parent)
public void last(Container parent)
public void show(Container parent, String name)
範例6.6.3:
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
public class CardLayoutApplet extends Applet implements ActionListener
{
Panel myPanel;
Button myButton[]=
new Button[5];
CardLayout Card=new
CardLayout();
public void init()
{
myPanel
= new Panel();
myPanel.setLayout(Card);
this.add(myPanel);
for
(int i=0;i<5;i++)
{
myButton[i]
= new Button("這是第" + String.valueOf(i)+"層版面");
myPanel.add(String.valueOf(i),
myButton[i]);
myButton[i].addActionListener(this);
}
}
public void actionPerformed(ActionEvent
theEv)
{
if (theEv.getSource()==myButton[0]||theEv.getSource()==myButton[1]
||theEv.getSource()==myButton[2]||theEv.getSource()==myButton[3]
||theEv.getSource()==myButton[4])
{
Card.next(myPanel);
}
}
}
結果瀏覽:
GridLayout
GridLayout的元件擺置方式是將 Applet切割成grids table,每一個grid都具有相同的寬度和高度。元件由左到右、由上到下依序(依加入的先後順序)排列。
範例6.6.4:
import java.awt.*;
import java.applet.*;
public class GridLayoutApplet extends Applet
{
Panel myPanel;
Button myButton[]= new Button[9];
public void init()
{
myPanel = new Panel();
myPanel.setLayout(new
GridLayout(3,3,5,5));
this.add(myPanel);
for (int i=0;i<9;i++)
{
myButton[i]
= new Button("GridLayout "+ String.valueOf(i));
myPanel.add(myButton[i]);
}
}
}
GridBagLayout
GridBagLayout類似GridLayout ,但多出兩項功能:
1. 每一個grid可以擁有自己的寬度和高度。
2. 元件擺放的位置可以由設計者指定,而不一定依鍵入先後順序由左到右、由上到下排列。 |