Layout Manager
Mỗi Container có một đối tượng Layout Manager mặc định,
người dùng có thể gán cho Container một đối tượng Layout
Manger khác.
Mỗi loại Layout Manager có các nguyên tắc riêng cho việc bố
trí các Component bên trong một Container.
Một Layout Manager chịu trách nhiệm bố trí các
Component được thêm vào Container và khi Container
thay đổi kích thước.
Sử dụng phương thức setLayout (LayoutManager mng) của
Container để thay đổi cách bố trí các Component bên
trong.
34 trang |
Chia sẻ: thanhle95 | Lượt xem: 563 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Bài giảng Lập trình cơ sở dữ liệu - Java - Bài 2: Swing layout manager - Nguyễn Hữu Thể, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
1
LẬP TRÌNH JAVA CSDL
BÀI 2
SWING LAYOUT
MANAGER
Nguyễn Hữu Thể
2
Nội dung
Flow Layout
Border Layout
Card Layout
Grid Layout
Grid Bag Layout
Box Layout
Group Layout
3
Layout Manager
Một Container là một Component có thể chứa các Component
khác:
JFrame, JDialog, JScollPane, Jpanel, JDesktopPane,
JInternalFrame
getContentPane().add để thêm Component vào Container
Mỗi Container có một đối tượng Layout Manager
Layout Manager: sắp xếp vị trí của các Component bên trong
một Container.
Các Layout Manager “implements” từ interface
LayoutManager.
4
Layout Manager
Mỗi Container có một đối tượng Layout Manager mặc định,
người dùng có thể gán cho Container một đối tượng Layout
Manger khác.
Mỗi loại Layout Manager có các nguyên tắc riêng cho việc bố
trí các Component bên trong một Container.
Một Layout Manager chịu trách nhiệm bố trí các
Component được thêm vào Container và khi Container
thay đổi kích thước.
Sử dụng phương thức setLayout (LayoutManager mng) của
Container để thay đổi cách bố trí các Component bên
trong.
5
FlowLayout
Flow Layout bố trí các Component trong Container theo
dòng, từ trái sang phải theo thứ tự thêm vào.
Tạo dòng mới khi kích thước dòng còn lại không đủ
chứa Component thêm vào.
Flow Layout bố trí vị trí các Component phụ thuộc vào kích
thước của Container.
Mỗi dòng của các Component được window mặc định canh
giữa theo chiều ngang . Có thể điều chỉnh canh trái hoặc phải
6
JFrame FlowLayout – Cấu trúc class
package FlowLayout;
public class MyFlowLayout extends javax.swing.JFrame {
public MyFlowLayout() {
initComponents();
}
private void initComponents() {
setDefaultCloseOperation(
javax.swing.WindowConstants.EXIT_ON_CLOSE);
getContentPane().setLayout(
new java.awt.FlowLayout());
pack();
}
public static void main(String args[]) {
MyFlowLayout layout = new MyFlowLayout();
layout.setVisible(true);
}
}
7
JFrame FlowLayout – Tool Netbean
package FlowLayout;
public class MyFlowLayout extends javax.swing.JFrame {
public MyFlowLayout() {
initComponents();
}
private void initComponents() {
setDefaultCloseOperation(
javax.swing.WindowConstants.EXIT_ON_CLOSE);
getContentPane().setLayout(new java.awt.FlowLayout());
pack();
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new MyFlowLayout().setVisible(true);
}
});
}
}
8
FlowLayout – Một số phương thức
Phương thức khởi tạo mặc định
public FlowLayout ()
• align: FlowLayout.CENTER
• vgap: 5px, hgap: 5px
Phương thức khởi tạo có tham số
FlowLayout (int align)
• align: canh lề
– FlowLayout.CENTER : Canh giữa
– FlowLayout.LEFT; : Canh trái
– FlowLayout.RIGHT; : Canh phải
• hgap: 5px, vgap: 5px
9
FlowLayout – Một số phương thức
Phương thức khởi tạo có tham số
FlowLayout(int align, int vgap, int hgap)
• align : canh lề
• vgap : kích thước chiều ngang
• hgap: chiều dọc
10
FlowLayout – Một số phương thức
public void setAlignment(int align)
public void setHgap(int hgap)
public void setVgap (int vgap)
public int getAlignment()
public int getHgap ()
public int getVgap ()
11
FlowLayout – Một số phương thức
public class MyFlowLayout2 extends javax.swing.JFrame {
private JButton[] bt;
public MyFlowLayout2() {
initComponents();
}
private void initComponents() {
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setTitle("FlowLayout");
FlowLayout layout=new FlowLayout();
layout.setAlignment(FlowLayout.LEFT);
setLayout(layout);
bt = new JButton[15];
for (int i = 0; i < 15; i++) {
bt[i] = new JButton();
bt[i].setText(String.valueOf(i+1));
getContentPane().add(bt[i]);
}
pack();
}
public static void main(String args[]) {
MyFlowLayout2 frm = new MyFlowLayout2();
frm.setVisible(true);
}
}
12
BorderLayout
Border Layout bố trí các Component bên trong Container
theo 5 vùng:
"North", "South", "East", "West" ,"Center".
13
BorderLayout – Một số phương thức
Phương thức khởi tạo mặc định
public BorderLayout ()
hgap = 0
vgap = 0
Phương thức khởi tạo có tham số
public BorderLayout (int hgap, int vgap)
hgap: chiều ngang
vgap : chiều dọc
14
BorderLayout – Một số phương thức
public void setHgap(int hgap)
public void setVgap (int vgap)
public int getHgap()
public int getVgap ()
15
BorderLayout – Ví dụ
Tạo JFrame dùng BorderLayout
16
BorderLayout – Một số phương thức
package BorderLayout;
import java.awt.*;
import javax.swing.*;
public class MyBorderLayout extends javax.swing.JFrame {
private JButton btNorth;
private JButton btSouth;
private JButton btEast;
private JButton btWest;
private JButton btCenter;
public MyBorderLayout() {
initComponents();
}
private void initComponents() {
//MainFrame
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setTitle("BorderLayout");
BorderLayout layout = new BorderLayout();
setLayout(layout);
17
BorderLayout – Một số phương thức
//btNorth
btNorth = new JButton("NORTH");
getContentPane().add(this.btNorth,BorderLayout.NORTH);
//btWest
btWest = new JButton("WEST");
getContentPane().add(btWest,BorderLayout.WEST);
//btEast
btEast = new JButton("EAST");
getContentPane().add(btEast,BorderLayout.EAST);
//btSouth
btSouth = new JButton("SOUTH");
getContentPane().add(btSouth,BorderLayout.SOUTH);
//btCenter
btCenter = new JButton("CENTER");
getContentPane().add(this.btCenter,BorderLayout.CENTER);
pack();
}
public static void main(String args[]) {
MyBorderLayout frm = new MyBorderLayout();
frm.setVisible(true);
}
}
18
CardLayout
Card Layout quản lý nhiều Card cùng một không gian hiển thị
Card Layout giúp quản lý hai hay nhiều Component
(thường là JPanel) để chia sẽ cùng một không gian hiển
thị.
Chỉ duy nhất Top Card được hiển thị.
Mỗi “Card” có thể sử dụng Layout Manager riêng.
Card nào cũng có thể là Top Card
Có thể sử dụng JTabbedPane để thay cho Card Layout
19
CardLayout
Có thể sử dụng JTabbedPane để thay cho Card Layout
20
CardLayout - Một số phương thức
Phương thức khởi tạo mặc định
public CardLayout ()
• hgap = 0
• vgap = 0
Phương thức khởi tạo có tham số
public CardLayout (int hgap, int vgap)
• hgap: chiều ngang
• vgap : chiều dọc
21
CardLayout - Một số phương thức
public void setHgap(int hgap)
public void setVgap(int vgap)
public int getHgap()
public int getVgap()
public void next (Container parent)
public void previous(Container parent)
public void first(Container parent)
public void last(Container parent)
public void show(Container parent, String
name)
22
CardLayout – Ví dụ
23
CardLayout – Ví dụ
//CardLayout With tool Netbean
public class CardLayoutFrame extends javax.swing.JFrame {
public CardLayoutFrame() {
initComponents();
}
private void initComponents() {
setDefaultCloseOperation(
javax.swing.WindowConstants.EXIT_ON_CLOSE);
getContentPane().setLayout(new java.awt.CardLayout());
pack();
}
public static void main(String args[]) {
/* Set the Nimbus look and feel ... */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new CardLayoutFrame().setVisible(true);
}
});
}
}
24
CardLayout – Ví dụ
//CardLayout With tool Eclipse
public class CardLayout extends JFrame {
private JPanel contentPane;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
CardLayout frame = new CardLayout();
frame.setVisible(true);
} catch (Exception e) { e.printStackTrace(); }
}
});
}
public CardLayout() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new java.awt.CardLayout(0, 0));
setContentPane(contentPane);
}
}
25
CardLayout – Ví dụ
//CardLayout With tool Eclipse – 4 button
public class CardLayout extends JFrame {
private JPanel contentPane;
public CardLayout() {
setTitle("CardLayout");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 210, 113);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(new java.awt.CardLayout(0, 0));
JPanel panel = new JPanel();
contentPane.add(panel, "Card Layout");
JButton btnNewButton1 = new JButton("Button 1");
panel.add(btnNewButton1);
JButton btnNewButton2 = new JButton("Button 2");
panel.add(btnNewButton2);
JButton btnNewButton3 = new JButton("Button 3");
panel.add(btnNewButton3);
JButton btnNewButton4 = new JButton("Button 4");
panel.add(btnNewButton4);
}
26
GridLayout
Grid Layout bố trí các Component của Container vào bên
trong một Grid với các Row và Column.
Mỗi Component được bố trí trong 1 Cell của lưới.
Tất cả các Cell có cùng kích thước bên trong Grid.
Các Component được thêm vào Container theo thứ tự từ trái
sang phải, từ trên xuống dưới (mặc định).
Kích thước của mỗi Cell được xác định bởi kích thước của
Container.
27
GridLayout
GridLayout()
rows: 1
1 Component / 1 Column
GridLayout(int rows, int cols)
GridLayout(int rows, int cols, int hgap, int
vgap)
28
GridLayout – Ví dụ 1
29
CardLayout – Ví dụ
// GridLayout With tool Eclipse
public class GridLayoutFrame extends JFrame {
private JPanel contentPane;
private JButton[] bt;
public GridLayoutFrame() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(new GridLayout(1, 0, 0, 0));
this.bt = new JButton[21];
for (int i = 0; i < 15; i++) {
this.bt[i] = new JButton();
this.bt[i].setText(String.valueOf(i + 1));
this.getContentPane().add(this.bt[i]);
}
}
30
GridLayout – Ví dụ 2
31
CardLayout – Ví dụ
// GridLayout With tool Eclipse
public class GridLayoutFrame extends JFrame {
private JPanel contentPane;
private JButton[] bt;
public GridLayoutFrame() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(new GridLayout(5, 3));//5 dòng 3 cột
this.bt = new JButton[21];
for (int i = 0; i < 15; i++) {
this.bt[i] = new JButton();
this.bt[i].setText(String.valueOf(i + 1));
this.getContentPane().add(this.bt[i]);
}
}
32
GridBag Layout
GridBag Layout bố trí các Component trong một Grid với các
Row và Column.
Mỗi Component bên trong Grid được RowSpan và
ColumnSpan (giống table HTML)
Width và Height của các Row/Column có thể khác nhau.
GridBag Layout là một Layout Manager rất linh động cho
việc bố trí các Component bên trong Container theo dạng
Grid.
GridBag Layout là một trong các Layout Manager thường
sử dụng nhất mà Java Platform cung cấp.
33
Box Layout
Box Layout bố trí các Component bên trong Container theo 1
dòng theo trục X, hoặc là trục Y.
BoxLayout(Container container, int align)
container: chứa các Component
align :
• BoxLayout.X_AXIS : Trục X
• BoxLayout.Y_AXIS : Trục Y
34
Group Layout
Group Layout bố trí các Component bên trong Container
theo chiều ngang và chiều dọc.
Sự bố trí được thực hiện theo mỗi chiều riêng lẽ.