Sử dụng Layout Managers

Một phần của tài liệu Giáo trình java gửi với Swing (Trang 28 - 32)

Phõ̀n này cung cṍp các qui tắc tụ̉ng quan và chi tiờ́t lợ̀nh trong viợ̀c sử dụng viợ̀c quản lý bụ́ trí mà Java platform cung cṍp.

Sử dụng Layout Managers Sử dụng BorderLayout

Sau đõy là mụ̣t Applet cho thṍy BorderLayout làm viợ̀c như thờ́ nào. setLayout(new BorderLayout());

setFont(new Font("Helvetica", Font.PLAIN, 14));

add("North", new Button("North")); add("South", new Button("South")); add("East", new Button("East")); add("West", new Button("West")); add("Center", new Button("Center"));

Quan trọng: khi thờm mụ̣t thành phõ̀n vào mụ̣t Container sử dụng

BorderLayout, bạn nờn dùng phương thức add() hai thụng sụ́, và thụng sụ́ thứ nhṍt phải là "North", "South", "East", "West", hoặc "Center". Nờ́u bạn sử dụng phương thức add()mụ̣t thụng sụ́ hay bạn khụng xác lọ̃p thụng sụ́ thứ nhṍt thì thành phõ̀n đó sẽ khụng hiờ̉n thị.

Theo mặc định, BorderLayout khụng đặt khoảng trụ́ng giữa các thành. Muụ́n vọ̃y, bạn phải xác lọ̃p nó bằng cách dùng cṍu trúc sau:

public BorderLayout(int horizontalGap, int verticalGap)

Sử dụng CardLayout

Sau đõy là mụ̣t Applet cho thṍy CardLayout làm viợ̀c như thờ́ nào.

//Where instance variables are declared:

Panel cards;

final static String BUTTONPANEL = "Panel with Buttons"; final static String TEXTPANEL = "Panel with TextField";

//Where the container is initialized:

cards = new Panel();

cards.setLayout(new CardLayout());

...//Create a Panel named p1. Put buttons in it. ...//Create a Panel named p2. Put a text field in it.

cards.add(BUTTONPANEL, p1); cards.add(TEXTPANEL, p2);

Khi bạn thờm mụ̣t thành phõ̀n vào mụ̣t Container mà có sử dụng CardLayout, bạn phải sử dụng phương thức add() hai thụng sụ́: add(String name, Component comp). Thụng sụ́ thứ nhṍt có thờ̉ bṍt kì chuụ̃i nào đờ̉ nhọ̃n ra thành phõ̀n được thờm vào.

//Where the container is initialized:

. . .

//Put the Choice in a Panel to get a nicer look. Panel cp = new Panel();

Choice c = new Choice(); c.addItem(BUTTONPANEL); c.addItem(TEXTPANEL); cp.add(c);

add("North", cp); . . .

public boolean action(Event evt, Object arg) { if (evt.target instanceof Choice) {

((CardLayout)cards.getLayout()).show(cards,(String)arg); return true;

}

return false; }

Như đoạn mã trờn, bạn có thờ̉ sử dụng phương thức show() của CardLayout đờ̉ xác lọ̃p thành phõ̀n hiờ̉n thị hiợ̀n tại. Thụng sụ́ thứ nhṍt của phương thức show() là Container mà CardLayout điờ̀u khiờ̉n. thụng sụ́ thứ hai là chuụ̃i đờ̉ xác định thành phõ̀n hiờ̉n thị. Chuụ̃i này giụ́ng như chuụ̃i của thành phõ̀n thờm vào Container.

Theo sau là tṍt cả các phương thức của CardLayout mà có thờ̉ cho phép chọn mụ̣t thành phõ̀n. cho mụ̃i phương thức, thụng sụ́ thứ nhṍt Container cho CardLayout là mụ̣t Layout Manager. (adsbygoogle = window.adsbygoogle || []).push({});

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)

Sử dụng FlowLayout

Sau đõy là mụ̣t Applet cho thṍy FlowLayout hoạt đụ̣ng như thờ́ nào. setLayout(new FlowLayout());

setFont(new Font("Helvetica", Font.PLAIN, 14)); add(new Button("Button 1"));

add(new Button("2"));

add(new Button("Button 3"));

add(new Button("Long-Named Button 4")); add(new Button("Button 5"));

Lớp FlowLayout có ba cṍu trúc: public FlowLayout()

public FlowLayout(int alignment) public FlowLayout(int alignment,

int horizontalGap, int verticalGap)

thụng sụ́ alignment phải là các giá trị FlowLayout.LEFT, FlowLayout.CENTER, hoặc FlowLayout.RIGHT. Thụng sụ́ horizontalGap và verticalGap xác định sụ́ Pixel

đặc giữa các thành phõ̀n. Nờ́u bạn khụng xác lọ̃p giá trị này, FlowLayout sẽ mặc định giá tri 5 cho mụ̃i thụng sụ́.

Sử dụng GridLayout

Sau đõy là mụ̣t Aplet cho thṍy GridLayout làm viợ̀c như thờ́ nào.

//Construct a GridLayout with 2 columns and an unspecified number of rows.

setLayout(new GridLayout(0,2));

setFont(new Font("Helvetica", Font.PLAIN, 14));

add(new Button("Button 1")); add(new Button("2"));

add(new Button("Button 3"));

add(new Button("Long-Named Button 4")); add(new Button("Button 5"));

Cṍu trúc trờn cho thṍy lớp GridLayout tạo mụ̣t đụ́i tượng có hai cụ̣t và nhiờ̀u hàng. Đõy là mụ̣t trong hai cṍu trúc cho GridLayout. Sau đõy là cách khai báo cho cả hai cṍu trúc này:

public GridLayout(int rows, int columns) public GridLayout(int rows, int columns, int horizontalGap, int verticalGap)

Sử dụng GridBagLayout

Theo sau là mụ̣t vài đoạn lợ̀nh tiờu biờ̉u trong mụ̣t Container có sử dụng GridBagLayout.

GridBagLayout gridbag = new GridBagLayout(); GridBagConstraints c = new GridBagConstraints(); setLayout(gridbag);

//For each component to be added to this container: //...Create the component...

//...Set instance variables in the GridBagConstraints instance...

gridbag.setConstraints(theComponent, c); add(theComponent);

Bạn có thờ̉ sử dụng lại mụ̣t đụ́i tượng của GridBagConstraints cho nhiờ̀u thành phõ̀n khác nhau, ngay cả khi các thành phõ̀n đó có sự ràng buụ̣c khác nhau. GridBagLayout rút ra mụ̣t giá trị ràng buụ̣c và khụng dùng lại GridBagConstraints. Bạn phải cõ̉n thọ̃n, tuy nhiờn, đờ̉ khởi tạo lại giá trị của mụ̣t đụ́i tượng GridBagConstraints làm giá trị mặc định khi cõ̀n thiờ́t. (adsbygoogle = window.adsbygoogle || []).push({});

Bạn có thờ̉ xác lọ̃p các giá trị sau: gridx, gridy

Xác định hàng và cụ̣t tại vị trí trờn bờn tái của thành phõ̀n. Hõ̀u hờ́t cụ̣t trờn bờn tải có địc chỉ gridx=0, và hàng trờn cùng có địa chỉ gridy=0. Sử dụng GridBagConstraints.RELATIVE (giá trị mặc định) đờ̉ xác định rằng thành phõ̀n đó chỉ ở bờn phải hay ở phía dưới.

gridwidth, gridheight

xác lọ̃p sụ́ cụ̣t hoặc sụ́ hàng trong vùng hiờ̉n thị của thành phõ̀n. những giá trị này xác định sụ́ Cell mà thành phõ̀n sử dụng, khụng phải sụ́ Pixel nó sử dụng. Mặc định là 1. Sử dụng GridBagConstraints.REMAINDER đờ̉ xác định thành phõ̀n đang ở hàng cuụ́i cùng hay cụ̣t cuụ́i cùng. Sử dụng

GridBagConstraints.RELATIVE đờ̉ xác định bước kờ́ tiờ́p của thaǹh phõ̀n là hàng cuụ́i hay cụ̣t cuụ́i cùng.

fill

Được sử dụng khi vùng hiờ̉n thị của thành phõ̀n lớn hơn kich thước thành phõ̀n đòi hỏi đờ̉ quyờ́t định khi nào hoặc thay đụ̉i kích thước như thờ́ nào. các giá trị thích hợp là GridBagConstraints.NONE (mặc định), GridBagConstraints.HORIZONTAL, GridBagConstraints.VERTICAL và GridBagConstraints.BOTH.

ipadx, ipady

xác định phõ̀n phụ ở bờn trong: bao nhiờu đờ̉ thờm vào kích thước tụ́i thiờ̉u của thành phõ̀n. giá trị mặc định là 0. Chiờ̀u rụ̣ng của thành phõ̀n tụ́i thiờ̉u nhṍt là bằng chiờ̀u rụ̣ng tụ́i thiờ̉u của nó cụ̣ng với ipadx*2. Similarly, chiờ̀u cao của thành phõ̀n tụ́i thiờ̉u nhṍt là bằng chiờ̀u cao tụ́i thiờ̉u của nó cụ̣ng với ipady*2. insets

xác định phõ̀n phụ bờn ngoài của thành phõ̀n. mặc định, mụ̃i thành phõ̀n khụng có phõ̀n phụ bờn ngoài.

anchor

được sử dụng khi thành phõ̀n nhỏ hơn vùng hiờ̉n thị đờ̉ quyờ́t định khi nào đặt thành phõ̀n. gái trị thích hợp là GridBagConstraints.CENTER (mặc định), GridBagConstraints.NORTH, GridBagConstraints.NORTHEAST, GridBagConstraints.EAST, GridBagConstraints.SOUTHEAST, GridBagConstraints.SOUTH, GridBagConstraints.SOUTHWEST, GridBagConstraints.WEST, và GridBagConstraints.NORTHWEST.

Ví dụ :

Sau đõy là mụ̣t Applet chỉ cho thṍy GridBagLayout hoạt đụ̣ng như thờ́ nào. Sau đõy là mụ̣t đoạn lợ̀nh tạo mụ̣t GridBagLayout và các thành phõ̀n nó quản lí

protected void makebutton(String name, GridBagLayout gridbag, GridBagConstraints c) { Button button = new Button(name); gridbag.setConstraints(button, c); add(button);

}

public GridBagWindow() {

GridBagLayout gridbag = new GridBagLayout(); GridBagConstraints c = new GridBagConstraints(); setFont(new Font("Helvetica", Font.PLAIN, 14)); setLayout(gridbag); c.fill = GridBagConstraints.BOTH; c.weightx = 1.0; makebutton("Button1", gridbag, c); makebutton("Button2", gridbag, c); makebutton("Button3", gridbag, c);

c.gridwidth = GridBagConstraints.REMAINDER; //end of row makebutton("Button4", gridbag, c);

c.weightx = 0.0; //reset to the default makebutton("Button5", gridbag, c); //another row

c.gridwidth = GridBagConstraints.RELATIVE; //next to last in row makebutton("Button6", gridbag, c);

c.gridwidth = GridBagConstraints.REMAINDER; //end of row makebutton("Button7", gridbag, c);

c.gridwidth = 1; //reset to the default c.gridheight = 2;

c.weighty = 1.0;

makebutton("Button8", gridbag, c);

c.weighty = 0.0; //reset to the default

c.gridwidth = GridBagConstraints.REMAINDER; //end of row c.gridheight = 1; //reset to the default

makebutton("Button9", gridbag, c); makebutton("Button10", gridbag, c); }

Một phần của tài liệu Giáo trình java gửi với Swing (Trang 28 - 32)