You are on page 1of 151

1

➢ Các gói lập trình giao diện trong Java


➢ Các lớp Swing Container
➢ Các lớp Swing Component cơ bản
➢ Xử lý sự kiện
➢ Các lớp Swing Layout
➢ Menu và các lớp Component nâng cao
➢ Java Look and Feel

2
➢ Java AWT (Abtract Window Toolkit)
➢ Java Swing
➢ JFC (Java Foundation Classess)

3
➢ Thư viện AWT (Abtract Window Toolkit) là
thành phần cốt lõi tạo nên giao diện người sử
dụng đồ họa (GUI – Graphic User Interface).
➢ AWT chứa các lớp và phương thức cho phép
thiết kế , quản lý cửa sổ trên giao diện đồ họa.
➢ Hầu như tất cả các component trong awt đều
kế thừa từ lớp java.awt.Component.
➢ Một số component trong awt: Label, Button,
CheckBox, List, Scrollbar,…

4
➢ AWT có một số hạn chế:
– Các thành phần GUI có thể có hình dạng, hành
động khác nhau trên các hệ điều hành khác
nhau (heavyweight).
– Look and Feel của mỗi thành phần rất khó thay
đổi.

5
➢ Là một thư viện để xây dựng các ứng dụng
giao diện đồ họa người dùng (GUI – Graphics
User Interface) của ngôn ngữ JAVA.
➢ Swing giải quyết được các hạn chế của liên
quan đến các thành phần của AWT thông qua
việc sử dụng 2 tính năng: lightweight và
pluggable look and feel.

6
➢ Lightweight: Các thành phần này được viết
hoàn toàn bằng Java, do đó nó không phụ
thuộc vào hệ điều hành và cũng rất linh hoạt.
➢ Các class Swing có khả năng viết những cảm
quan (Look & Feel) cho mỗi thành phần và có
thể thay đổi cảm quan vào thời điểm thực thi.
➢ Swing có rất nhiều thành phần mới như: table,
tree, slider, spinner, progress bar, internal
frame, text.

7
➢ Swing Toolkit bao gồm một tập hợp các
components sử dụng trong việc xây dựng một
ứng dụng GUI từ cơ bản đến phức tạp.
➢Đa số các component có trong awt đều có
trong swing, và tên của các component
tương ứng sẽ có chữ J đứng trước.

8
➢ Các thành phần trong Swing Toolkit:
– Swing Windows: Chứa các loại cửa sổ hiển
thị của một ứng dụng GUI.
– Swing Controls: Các control để thiết kế
giao diện.
– Swing Containers: Các control dùng để
gom nhóm, chứa các control khác.
– Swing Menu: Thiết kế menu cho một ứng
dụng swing.

9
➢ Swing Windows:
– JFrame: Một cửa sổ dạng top-level-window
– JDialog: Một cửa sổ hộp thoại sử dụng để
nhập và xuất dữ liệu
– JInternalFrame: Một cửa sổ trong một ứng
dụng MDI.
➢ Swing Containers:
– JDesktopPane
– JPanel
10
Kiến trúc của Java Swing API 11
No. AWT Swing
1 Các component phụ thuộc Các component độc lập
platform với platform
2 Không hỗ trợ Look and Feel Hỗ trợ Look and Feel
3 Các component là Các component là
Heavyweight Lightweight
4 Ít component hơn Swing Nhiều component hơn
AWT, chẳng hạn như:
tables, lists,
scrollpanes…
5 Không theo mô hình MVC Theo mô hình MVC
Một số điểm khác nhau giữa AWT và Swing
12
➢ javax.swing: các component thông thường
của swing.
➢ javax.swing.border: chứa các lớp và
interface hỗ trợ làm việc với các kiểu border.
➢ javax.swing.event: chứa các lớp và interface
hỗ trợ làm việc với sự kiện và listener.
➢ javax.swing.filechooser : chứa các lớp và
interface hỗ trợ làm việc với JFileChooser (lựa
chọn file).

13
➢ javax.swing.plaf: chứa các look & feel API
dùng để định nghĩa custom look & feel.
➢ javax.swing.plaf.basic: chứa các lớp và
interface hỗ trợ làm việc với các look & feel cơ
bản.
➢ javax.swing.plaf.metal: chứa các lớp và
interface hỗ trợ làm việc với metal look & feel.
Đây là look & feel default của java.
➢ javax.swing.plaf.multi: chứa các lớp và
interface hỗ trợ làm việc với multiplexing look
& feel. 14
➢ javax.swing.colorchooser: chứa các lớp và
interface hỗ trợ làm việc với hộp thoại lựa chọn
màu sắc.
➢ javax.swing.table: chứa các lớp và interface
hỗ trợ làm việc với giao diện dạng bảng
➢ javax.swing.text: chứa các lớp và interface
hỗ trợ việc thao tác với dữ liệu text.
➢ javax.swing.text.html: chứa các lớp và
interface hỗ trợ cho việc tạo và xem tài liệu
html.
15
➢ javax.swing.text.html.parser: chứa các lớp
và interface hỗ trợ cho việc phân tích tài liệu
html.
➢ javax.swing.text.rtf: chứa các lớp và
interface hỗ trợ cho việc thao tác với rich text
format.
➢ javax.swing.tree: chứa các lớp và interface
hỗ trợ cho việc tạo giao diện dưới dạng cây và
quản lý dữ liệu phân cấp.
➢ javax.swing.undo: chứa các lớp hỗ trợ cho
việc thực hiện các chức năng undo, redo. 16
➢ Container là thành phần đặc biệt có thể chứa
các thành phần khác.
➢ Top-level container là container cấp cao nhất, ở
trên cùng của hệ thống phân cấp.
➢ Swing cung cấp 3 top-level container:
– JFrame
– JDialog
– JApplet

17
18
➢ JFrame là top-level container.
➢ Dùng để tạo ra một cửa sổ, là giao diện chính
trong ứng dụng Swing.
➢ Một JFrame có thể chứa các thành phần khác
như: button, lable, checkbox…
➢ Cách sử dụng: tạo lớp kế thừa từ JFrame.
➢ Thêm các thành phần khác vào frame
frame.add(component);

19
20
➢ Một số phương thức thông dụng của JFrame
– public void setDefaultCloseOperation (int
operation);
– Ý nghĩa: Gán phương thức mặc định khi người
dùng đóng Frame.
– Có 4 lựa chọn (giá trị int operation)
• WindowConstants.DO_NOTHING_ON_CLOSE
• WindowConstants.HIDE_ON_CLOSE
• WindowConstants.DISPOSE_ON_CLOSE
• WindowConstants.EXIT_ON_CLOSE
21
➢ Một số phương thức thông dụng của JFrame
– public void setExtendedState (int state);
– Ý nghĩa: Gán trạng thái của JFrame
– Có 5 lựa chọn (giá trị int state)
• JFrame.NORMAL
• JFrame.ICONIFIED
• JFrame.MAXIMIZED_HORIZ
• JFrame.MAXIMIZED_VERT
• JFrame.MAXIMIZED_BOTH

22
➢ Một số phương thức thông dụng của JFrame
– public void setResizable (boolean resizable);
• true: Cho phép thay đổi kích thước
• false: không cho phép thay đổi kích thước
– public void setTitle (String title);
• Gán tiêu đề cho JFrame
– public void setIconImage (Image image);
• Gán hình ảnh Icon cho JFrame

23
➢ Một số phương thức thông dụng của JFrame
– public void setSize (Dimension d);
– public void setSize (int width, int height);
• Gán kích thước cho JFrame
– public void setLocation (Point p);
– public void setLocation (int x, int y);
• Gán vị trí cho JFrame
– public void setVisible (boolean visible);
• true : hiện Jframe
• false : ẩn Jframe
24
➢ Một số phương thức thông dụng của JFrame
– public Container getContentPane (): Lấy vùng
Content Pane của Frame.
– getContentPane().add: thêm một control vào
JFrame.
– getContentPane().setBackground(Color c): thiết
lập màu nền cho Content Pane của JFrame.

25
26
➢ JPanel là một container dùng để chứa các
thành phần đồ họa khác.
➢ Trong một JFrame chứa các JPanel, mỗi JPanel
chứa các đối tượng hoặc các JPanel khác.

27
➢ Khởi tạo:
– JPanel(): tạo một JPanel với layout mặc định là
FlowLayout.
– JPanel(LayoutManager layout): Tạo một JPanel
với layout chỉ định.
➢ Ví dụ:
– JPanel panel1 = new JPanel();
– JPanel panel2 = new JPanel(new GridLayout());

28
29
Một số component cơ bản:
➢ JLabel ➢ Border, Border Title
➢ JButton ➢ JScrollPane
➢ JTextField ➢ JComboBox
➢ JTextArea ➢ JList
➢ JCheckBox ➢ JOptionPane
➢ JRadioButton/Group

30
➢ JLabel
➢ JTextfield
➢ JRadioButton
(ButtonGroup)
➢ JComboBox
➢ JTextArea
➢ JScrollBar
➢ JCheckBox
➢ JButton

31
➢ Dùng để hiển thị văn bản hoặc biểu tượng để
tạo các chỉ dẫn, hướng dẫn trên giao diện
người dùng.
➢ Khởi tạo:
– Label(): label rỗng
– JLabel(String): label với chuỗi văn bản chỉ định
– JLabel(String, int): label với chuỗi văn bản và
alignment (LEFT, CENTER, RIGHT)
– JLabel(String, Icon, int): label với chuỗi văn
bản, icon và alignment.
32
➢ Một số phương thức:
– setText (String text)
– getText()
– setSize(Dimenstion d)
– setForeground(Color fg)
– setIcon(Icon i)
– getLength()
– setFont(Font f)

33
➢ Cho phép khi click chuột vào sẽ thực hiện công
việc gì đó.
➢ Khởi tạo:
– JButton()
– JButton(Action a)
– JButton(Icon icon)
– JButton(String text)
– JButton(String text, Icon icon)

34
➢ Một số phương thức:
– setText (String text)
– getText ()
– setForeground (Color fg)
– setFocusCycleRoot (boolean b)
– setHorizontalTextPosition (int position)
• SwingConstants.LEFT
• SwingConstants.RIGHT
• SwingConstants.CENTER

35
➢ Một số phương thức:
– setVerticalTextPosition (int position)
• SwingConstans.TOP
• SwingConstans.BOTTOM
• SwingConstans.CENTER
– setIcon (Icon c)

36
➢ Sự kiện (events):
– actionPerformed
– mousePressed

37
➢ Dùng để nhập và hiển thị dữ liệu.

38
➢ Khởi tạo:
– JTextField()
– JTextField(int)
– JTextField(String)
– JTextFiele(String, int)
– JTextField(int cols)
– JTextField(String text, int cols)

39
➢ Một số phương thức:
– setText (String text)
– getText ( )
– setForeground (Color fg)
– setEditable(boolean b)
– trim()
– setFont (Font f)

40
➢ Là thành phần cho phép hiển thị nhiều dòng
văn bản, đồng thời người dùng có thể chỉnh
sửa nội dung văn bản.
➢ Khởi tạo
– JTextArea ()
– JTextArea (int rows, int columns)
– JTextArea (String text, int rows, int columns)
–…

41
➢ Một số phương thức
– setRows (int rows): Thiết lập số dòng
– setColumns (int columns): Thiết lập số cột
– setFont (font f)
– insert (String s, int position): chèn chuỗi s vào
vị trí position
– append(String s): thêm s và cuối.

42
➢ Cho phép lựa chọn một hoặc nhiều thuộc tính
trong một danh sách lựa chọn.
➢ Khởi tạo:
– JCheckBox()
– JCheckBox(Action a)
– JCheckBox(Icon icon)
– JCheckBox(Icon icon, boolean selected)
– JCheckBox(String text)
– JCheckBox(String text, boolean selected)
– JCheckBox(String text, Icon icon)
– JCheckBox(String text, Icon icon,boolean selected)
43
➢ Phương thức:
– setSelected (boolean b)
– isSelected ()
– setText (String text)
– getText ()
➢ Sự kiện
➢ actionPerformed: Sự kiện khi checkbox được
nhấn.

44
➢ Cho phép lựa chọn một thuộc tính trong một
nhóm các lựa chọn.
➢ Khởi tạo:
– JRadioButton()
– JRadioButton(Action a)
– JRadioButton(Icon icon)
– JRadioButton(Icon icon, boolean selected)
– JRadioButton(String text)
– JRadioButton(String text, boolean selected)
– JRadioButton(String text, Icon icon)
– JRadioButton(String text, Icon icon,boolean selected)
45
➢ Phương thức:
– setSelected (boolean b)
– isSelected ()
– setText (String text)
– getText ()
➢ Sự kiện
– actionPerformed: Sự kiện khi radioButton được nhấn.
ButtonGroup group = new ButtonGroup();
group.add (birdButton);
Phải nhóm các
group.add (catButton);
RadioButton lại thành group.add (dogButton);
một nhóm group.add (rabbitButton);
group.add (pigButton);
46
➢ Là thành phần cho phép người dùng chọn một
item từ một danh sách item. Có 2 loại
JComboBox:
– JComboBox mặc định: không chỉnh sửa được,
người dùng chỉ được phép chọn từ danh sách.
– JComboBox chỉnh sửa được, người dùng có thể
gõ vào vùng text hoặc chọn từ danh sách.
➢ Khởi tạo:
– JComboBox(): Khởi tạo ComboBox với dữ liệu
mặc định.
– JComboBox(E[] items): Khởi tạo ComboBox
chứa các item trong mảng E. 47
➢ ComboBoxModel: đối tượng quản lý dữ liệu của
ComboBox.
➢ Phương thức của ComboBoxModel
– addElement (Object o)
– getElementAt (int index)
– getIndexOf (Object item)
– getSelectedItem ()
– removeAllItems ()
– removeItemAt (int index)
– setSelectedItem (int index)
48
➢ Phương thức của JComboBox
– setModel (ComboBoxModel model)
– getModel ()
– setSelectedIndex (int index)
– getSelectedItem ()
– getSelectedIndex ()
– getItemCount ()
➢ Sự kiện
– actionPerformed: Sự kiện khi comboBox thay
đổi item hiển thị.
49
JComboBox cboXepLoai=new JComboBox();
cboXepLoai.addItem("Xuất sắc");
cboXepLoai.addItem("Giỏi");
cboXepLoai.addItem("Khá");
cboXepLoai.addItem("Trung bình");
add(cboXepLoai);

String arr[]={"Xuất sắc" ,"Giỏi" ,"Khá","Trung


bình"};
JComboBox cboXepLoai=new JComboBox(arr);
add(cboXepLoai);

50
51
➢ JList trình bày một nhóm các item, thể hiện
trên một hoặc nhiều cột để người dùng lựa
chọn.
➢ Khởi tạo:
– JList(): Khởi tạo một JList rỗng, chỉ đọc.
– JList(E[] items): Khởi tạo một JList hiển thị các
phần tử trong mảng E.

52
➢ Phương thức của DefaulListModel
– addElement (Object e)
– get (int index)
– getSize ()
– getElementAt (int index)
– remove (int index)
– Elements()
– removeAllElements ()

53
➢ Phương thức của JList
– setModel (ListModel model)
– getModel ()
– getMaxSelectionIndex ()
– getMinSelectionIndex ()
– getSelectedIndex ()
– getSelectedIndices ()
– getSelectedValue ()
– getSelectedValues ()
➢ Sự kiện: valueChanged
54
55
56
57
Class Object name Properties
JFrame GUI_01 Layout: null, defaultCloseOperation: DO_NOTHING
Title: GUI-Demo 1
JPanel pEmp Layout: null, Border: tittleBorder
JLable lbCode Opaque: true, background: green, foreground: white
horizontalAlignment: RIGHT, text: Code
JLabel others Text: Name, Sex, Degree
ButtonGroup bgrpSex
JRadioButton rdMale buttonGroup: bgrpSex,Text: Male, Selected: true,
JRadioButton rdFemale buttonGroup: bgrpSex,Text: Female, Selected: false
JComboBox cbDegree Model:Ph. D., Master, Engineer, Bachelor, Technician
Button btnHideShow Text: Hide
JButton btnExit Text: Exit, mnemonic: E, TooltipText: Exit program

58
59
JOptionPane.showMessageDialog(
this,
"Message",
"Title",
JOptionPane.INFORMATION_MESSAGE);

JOptionPane.showMessageDialog(
this,
"Warning !!!",
"Title",
JOptionPane.WARNING_MESSAGE);

Message types: public static void showMessageDialog(Component


• ERROR_MESSAGE parentComponent, Object message, String title, int
• INFORMATION_MESSAGE messageType)
• WARNING_MESSAGE
• QUESTION_MESSAGE
• PLAIN_MESSAGE
60
int n = JOptionPane.showConfirmDialog(
this, "Message", "Title",
JOptionPane.YES_NO_OPTION,
JOptionPane.WARNING_MESSAGE);

if ( n== JOptionPane.YES_OPTION)
{
//YES Option types:
} • DEFAULT_OPTION
else • YES_NO_OPTION
{ • YES_NO_CANCEL_OPTION
//NO • OK_CANCEL_OPTION
}
Message types:
public static int showConfirmDialog(Component • ERROR_MESSAGE
parentComponent, Object message, String title, int • INFORMATION_MESSAGE
optionType, int messageType) • WARNING_MESSAGE
• QUESTION_MESSAGE
• PLAIN_MESSAGE
Object[] options = new Object[] {"Yes, please !", "Oh, No!"};
int n = JOptionPane.showOptionDialog(
this,
"Message",
"Title",
JOptionPane.YES_NO_OPTION, //Optiont type
JOptionPane.QUESTION_MESSAGE, //Message type
null, //Không dùng custom icon
options, //Tiêu đề của các button
options[0]); //Button mặc định

if ( n== JOptionPane.YES_OPTION)
{
//YES
}
else
{
//NO
}
63
➢ Sự kiện (event) được phát sinh khi người dùng
tương tác với GUI, ví dụ như: click chuột, di
chuyển chuột, chọn menu, nhập văn bản vào
TextField, đóng cửa sổ…
➢ Xử lý sự kiện (Event Handing) là một kiểm soát
sự kiện và quyết định những gì cần thực hiện
khi một sự kiện xảy ra.
➢ Chương trình xử lý các sự kiện bằng cách đặt
“bộ lắng nghe sự kiện” trên các thành phần
GUI.
64
➢ 3 thành phần chính của mô hình xử lý sự kiện
trong Java:
– Event Source: Nguồn gây ra sự kiện, thường
là các thành phần GUI của chương trình, chịu
trách nhiệm cung cấp thông tin về sự kiện đã
xảy ra với bộ xử lý sự kiện.
– Event Object: Đối tượng lưu thông tin về sự
kiện đã xảy ra. Các lớp sự kiện là lớp con của
lớp AWTEvent.
– Event Listener: đối tượng sẽ nhận được thông
tin khi có sự kiện xảy ra.
65
➢ Các bước cài đặt và quản lý sự kiện:
– Bước 1: Xác định đối tượng sẽ gây ra sự kiện
(event source). Ví dụ như: Button, TextField…
– Bước 2: Xác định sự kiện cần xử lý trên đối
tượng đã gây ra sự kiện. Ví dụ như: sự kiện
nhấn nút, gõ văn bản vào TextField…
– Bước 3: Xác định đối tượng nghe sự kiện để
cài đặt các phương thức tương ứng. Ví dụ như
frame chứa Button, TextField hay một lớp nào
khác chịu trách nhiệm nghe sự kiện.

66
➢ Các bước cài đặt và quản lý sự kiện:
– Bước 4: Đăng ký đối tượng nghe trên đối
tượng gây ra sự kiện. Ví dụ:
button.addActionListener(this);

67
➢ Đăng ký đối tượng nghe sự kiện:
– Sử dụng tên phương thức như sau:
add+<loại sự kiện>+Listener(<lớp nghe
sự kiện>);
– Ví dụ:
• addActionListener(ActionListener); //Button
• addItemListener(ItemListener); //List

68
➢ Một số sự kiện thường dùng
Event class Listener Interface Mô tả
ActionEvent ActionListener Khi button được nhấn,
menu được chọn…
AdjustmentEvent AdjustmentListener Khi sử dụng thanh cuộn
ComponentEvent ComponentListener Khi component thay đổi
kích thước, di chuyển…
FocusEvent FocusListener Khi component mất hoặc
có focus
ItemEvent ItemListener Khi menu item được
chọn/bỏ chọn, checkbox
được chọn…

69
➢ Một số sự kiện thường dùng (2)
Event class Listener Interface Mô tả
WindowEvent WindowListener Khi một cửa sổ được
đóng, mở…
TextEvent TextListener Khi nội dung TextField
hoặc TextArea thay đổi
MouseEvent MouseListener Khi di chuyển chuột, click,
MouseMotionListener drop, drag chuột.
KeyEvent KeyListener Khi nhập dữ liệu từ bàn
phím

70
➢ Nhược điểm của việc sử dụng Interface:
– Phải cài đặt tất cả các phương thức của
interface.
– Nếu chỉ cần xử lý 1 sự kiện → Tạo ra nhiều
phương thức rỗng.
➢ AWT cung cấp các lớp adapter cho các
listener có nhiều hơn 1 phương thức.
➢ Để sử dụng các lớp này, người dùng cài đặt
các lớp kế thừa từ các Adapter thay vì thực thi
các giao diện.
71
➢ Các Listener method
Listener
Adapter Class Event Class Listener Method
Interface
ActionListener None ActionEvent actionPerformed
AdjustmentLis None AdjustmentEvent adjustmentValueCha
tener nged
ComponentLis ComponentAdapte ComponentEvent componentHidden
tener r
componentMoved
componentResized
componentShown
ContainerListe ContainerAdapter ContainerEvent componentAdded
ner
componentRemoved
72
➢ Các Listener method
Listener
Adapter Class Event Class Listener Method
Interface
FocusListener FocusAdapter FocusEvent focusGained
focusLost
ItemListener None ItemEvent itemStateChanged
WindowListen WindowAdapter WindowEvent windowClosed
er
windowActivated
TextListener None TextEvent textValueChanged
MouseListener MouseAdapter MouseEvent mouseClicked
mouseEntered
mouseExited
mousePressed
mouseReleased 73
➢ Các Listener method
Listener
Adapter Class Event Class Listener Method
Interface
MouseMotionL MouseMotionAdap mouseDragged
istener ter
mouseMoved
KeyListener KeyAdapter KeyEvent keyPressed
keyReleased
keyTyped

74
➢ Ví dụ: ActionListener

75
➢ Ví dụ: ActionListener sử dụng Inner Class

76
➢ Ví dụ: FocusListener

77
➢ Ví dụ: KeyAdapter

78
➢ Ví dụ: KeyAdapter sử dụng Inner class

79
➢ Sử dụng IDE NetBeans

Frame Properties:
Layout: null
Title: GUI_02 Demo

80
81
82
➢ Sử dụng IDE NetBeans
Frame Properties:
Layout: null
Title: GUI_03 Demo

83
84
➢ FLowLayout
➢ BorderLayout
➢ BoxLayout
➢ GridLayout
➢ GridBagLayout
➢ CardLayout
➢…

85
➢ Layout là cách thức sắp xếp các component
trên một container, làm cho các component
xuất hiện với vị trí như mong muốn.
➢ Khi kích thước của container thay đổi, thì kích
thước và vị trí tương đối của các component
trong container cũng thay đổi theo.
➢ Mỗi Container có một đối tượng Layout
Manager.
➢ Layout Manager là một đối tượng quyết định
cách sắp xếp vị trí của các Component bên
trong một Container. 86
➢ 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.
➢ Mỗi dòng của các Component được window
mặc định canh giữa theo chiều ngang.

87
➢ Khởi tạo:
– FlowLayout()
• align: FlowLayout.CENTER
• vgap: 5px, hgap: 5px
– FlowLayout(int align)
• align: canh lề (trái, giữa, phải)
– FlowLayout(int align, int vgap, int hgap)
• align: canh lề
• vgap: kích thước chiều ngang
• hgap: kích thước chiều dọc
88
➢ Phương thức:
– setAlignment(int align)
– setHgap(int hgap)
– setVgap(int vgap)
– int getAlignment()
– int getHgap()
– int getVgap()

89
90
➢ BorderLayout là layout manager default của
các đối tượng JPanel.
➢ Border layout sẽ đặt các component vào trong
các vùng sau của container: “North”, “South”,
“East”, “West”, “Center”.

91
➢ Khởi tạo
– BorderLayout()
• hgap = 0
• vgap = 0
– BorderLayout(int hgap, int hgap)
• hgap: chiều ngang
• vgap: chiều dọc

92
➢ Một số phương thức:
– void setHgap(int hgap)
– void setVgap(int vgap)
– int getHgap()
– int getVgap()

93
94
➢ BoxLayout là layout mới trong swing.
➢ BoxLayout sẽ đặt lần lược các component từ
trái sang phải trên 1 dòng hoặc từ trên xuống
dưới trên 1 cột.

95
➢ Khởi tạo
– BoxLayout(Container container, int align)
• container: chứa các Component
• align:
– BoxLayout.X_AXIS: trục X
– BoxLayout.Y_AXIS: trục Y

96
97
➢ GridLayout trình bày các component lên
container dưới dạng lưới.
➢ Container sẽ được chia thành lưới các ô dưới
dạng nhiều dòng nhiều cột.
– Các ô có kích thước bằng nhau.
– Mỗi component sẽ được hiển thị trên 1 ô trong
lưới.
➢ 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).
98
➢ Khởi tạo
– GridLayout()
• rows: 1
• cols: 1
– GridLayout(int rows, int cols)
– GridLayout(int rows, int cols, int hgap, int vgap)

99
100
➢ GridBagLayout đặt các component trong một
lưới các dòng và cột,
– cho phép các component được đặt trên nhiều ô
thuộc nhiều dòng và cột.
– các dòng và các cột trong lưới các ô có thể có
kích thước khác nhau
➢ Khi thay đổi kích thước của container,
GridBagLayout sẽ thay đổi kích thước của từng
ô và thay đổi cách thức đặt các component
trên container.

101
➢ Chương trình phải xác định kích thước và các
đặc tính của component bằng cách đưa ra các
ràng buộc cho mỗi component. Các ràng buộc
này sẽ có ảnh hưởng đến cách thức hiển thị
của component trong container.
➢ Để xác định các ràng buộc, ta phải tạo ra đối
tượng GridBagConstraints.

102
➢ Các thuộc tính của GridBagConstraints
– gridx, gridy
– gridwidth, gridheight
– fill
– ipadx, ipady
– insets
– anchor
– weightx, weighty

103
➢ CardLayout là một dạng bố cục cho phép ta có thể
đặt nhiều component khác nhau trên cùng một
vùng không gian tại các thời điểm khác nhau.
➢ Chỉ duy nhất Top Cart được hiển thị. Mỗi Card có
thể sử dụng Layout Manager riêng.
➢ Có thể sử dụng JTabbedPane thay cho
CardLayout.

104
➢ Khởi tạo
– CardLayout()
• hgap = 0
• vgap = 0
– CardLayout(int hgap, int vgap)
• hgap: chiều ngang
• vgap: chiều dọc

105
➢ Một số phương thức
– void setHgap (int hgap)
– void setVgap (int vgap)
– int getHgap ()
– int getVgap ()
– void next (Container parent)
– void previous (Container parent)
– void first (Container parent)
– void last (Container parent)
– void show(Container parent, String name)
106
➢JMenu ➢JScrollPane
➢JMenuBar ➢JSpitPane
➢JMenuItem ➢JFileChooser
➢JPopupMenu ➢JDialog
➢JToolBar ➢ JDesktopPane&
➢JTable JInternalFrame
➢JTree
➢JTabbedPane

107
JMenuBar

JMenuItem JPopUpMenu

JMenu
JCheckBoxMenuItem

JRadioButtonMenuItem

JSeparator

108
➢ JMenu có thể sử dụng giống như một layout để
quản lý các component.
➢ Chỉ cho phép một chọn lựa tại một thời điểm.
➢ Có thể gán phím tắt cho các menu item.

109
➢ Khởi tạo
– JMenu(): khởi tạo menu mới không có tiêu đề.
– JMenu(Action a): khởi tạo menu mới với các
thuộc tính lấy từ Action a.
– JMenu(String s): khởi tạo menu có tiêu đề s.
– JMenu(String s, boolean b): khởi tạo menu với
tiêu đề s và thiết lập menu có tách rời hay
không.

110
➢ Cho phép tạo ra một menu bar theo chiều
ngang của component với các JMenu.
➢ Sử dụng phương thức add để thêm các JMenu
trên JMenuBar.
➢ JMenuBar sẽ hiển thị các Jmenu theo thứ tự từ
trái sang phải.

111
➢ Khởi tạo
– JMenuItem()
– JMenuItem(Action a)
– JMenuItem(Icon icon)
– JMenuItem(String text)
– JMenuItem(String text, Icon icon)
– JMenuItem(String text, int mnemonic)

112
➢ Là một loại menu đặc biệt, không gắn vào
menu bar, có thể hiển thị ở bất kỳ vị trí nào
trên màn hình.
➢ Sử dụng phương thức add() và insert() để
chèn một JMenuItem, một component hay một
action vào popup menu.

113
➢ Là đối tượng chứa các component khác.
➢ Khi một component được gắn vào Toolbar sẽ
hiển thị từ trái sang phải theo chỉ mục của nó.

114
115
116
117
118
119
Column Headers ColumnModel

data Data Model

class javax.swing.JTable
{ tableModel;
columModel;
selectionModel;
cellEditor; get/set
editorComp;
cellRenderer;
tableHeader;
int editingColumn, edittingRow;
color ….
….
}

Common Event handling:


MouseEvent
MouseListener
public void mouseClicked( MouseEvent e)

120
addRow()
rowCount
columnCount
…..
get/setValueAt(row,col) font
color
…..
TableModel
TableHeader ColumnModel TableColumn

JTable CellRender

color ColumnModel TableColumn


lineColor
rowHeight Maybe:
add/removeColumn() CellRender JCheckBox
rowCount removeRow(…)
columnCount CellEditor JTextField
getColumn ( i) JComboBox
…… Width
int rowAtPoint(Point)
int coloumnAtPoint(Point)
changeSelection(row,col,…)
int getSelectedColumn()
int getSelectedRow()
setSurrendersFocusOnKeyStroke (boolean)
set/getValueAt(…)…..
121
122
class JTree
inteface TreeModel inteface TreeCellRenderer
{ treeModel;
selectionModel;
class DefaultTreeModel cellRenderer; class DefaultTreeCellRenderer
cellEditor;
inteface TreeSectionModel …. inteface CellEditor
}
class DefaultTreeSelectionModel inteface TreeCellEditor

Model: User object class DefaultTreeCellEditor


NV01 Hoa 120

View: Node of tree

class DefaultMutableTreeNode inteface MutableTreeNode inteface TreeNode

123
124
➢ Dùng để chia cửa sổ thành 2 phần theo chiều
ngang hoặc chiều dọc.
➢ Trong một SplitPane có thể tạo SplitPane khác.

125
JPanel pnLeft = new JPanel();
JPanel pnRight = new JPanel();
JSplitPane sp1 = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
pnLeft, pnRight);
JPanel pnRight1 = new JPanel();
JPanel pnRight2 = new JPanel();
JSplitPane spRight = new JSplitPane(
JSplitPane.VERTICAL_SPLIT,pnRight1, pnRight2);

126
127
➢ Tạo cửa sổ tương tác với file: đọc, ghi file.
➢ Khởi tạo:
– JFileChooser chooser = new JFileChooser();
➢ Lọc loại file:
– setFileFilter()
➢ Đọc file:
– showOpenDialog(component parent)
➢ Lưu file:
– showSaveDialog(component parent)
128
129
➢ JDialog thường được sử dụng để nhập hoặc
xuất dữ liệu.
➢ JDialog có 2 trạng thái:
– Modal: Khi JDialog thực hiện xong mới được
phép thao tác lên form cha.
– Modeless: Sau khi hiển thị dialog, người dùng
có thể thao tác lên form cha.
➢ JDialog thường được sử dụng ở trạng thái
Modal.

130
package packageName;
import javax.swing.*;

public class NameDialog extends JDialog {


//Dữ liệu + Các phương thức get/set (nếu có)
public NameDialog (JFrame parent, boolean modal){
super(parent, modal);
this.intComponents();
}
public NameDialog (JDialog parent, boolean modal){
super(parent, modal);
this.intComponents();
}
private void initComponents (){

}
}
131
Cách sử dụng
//JDialog thường được gọi ở một JFrame hoặc JDialog khác
//Ví dụ: Gọi hiển thị Dialog và lấy kết quả trả về khi click một button

private void jbuttonActionPerformed(ActionEvent evt){

NameDialog dlg=new NameDialog (this, true);

//Gán dữ liệu cho dlg thông qua set (nếu có)

dlg.setVisible(true);

//Lấy dữ liệu cho dlg thông qua get (nếu có)


}

132
➢ Một số phương thức thông dụng của JDialog
– public void setDefaultCloseOperation(int
operation);
– Gán phương thức mặc định khi người dùng
đóng Dialog.
– Có 3 lựa chọn sau:
• WindowConstants.DO_NOTHING_ON_CLOSE
• WindowConstants.HIDE_ON_CLOSE
• WindowConstants.DISPOSE_ON_CLOSE

133
➢ Một số phương thức thông dụng của JDialog
– public void setResizable (boolean resizable);
– public void setTitle (String title);
– public void setBackground (Color c);
– public void setForeground (Color c);
– public void setIconImage (Image image);
– public void setSize (Dimension d);
– public void setSize (int width, int height);
– public void setLocation (Point p);

134
➢ Một số phương thức thông dụng của JDialog
– public void setLocation (int x, int y);
– public void setVisible (boolean visible);
– public void dispose();
– public Containter getCotentPane();
– public void setModal (boolean modal);
• true: Modal
• false : Modeless

135
➢ Một số phương thức thông dụng của JDialog
– public void setLocation (int x, int y);
– public void setVisible (boolean visible);
– public void dispose();
– public Containter getCotentPane();
– public void setModal (boolean modal);
• true: Modal
• false : Modeless

136
package demoswing;
import javax.swing.*;
public class VD3_Frame extends JFrame {
public VD3_Frame() {
initComponents();
}
private void initComponents() {
...
}
private void jbtnOpenDialogActionPerformed (java.awt.event.ActionEvent evt) {
VD3_Dialog dlg = new VD3_Dialog(this, true);
dlg.setValue(jlblResult.getText());
dlg.setVisible(true);
jlblResult.setText(dlg.getValue());
}
private JButton jbtnOpenDialog;
private JLabel jlblResult;
}
137
package demoswing;
import javax.swing.*;
public class VD3_Dialog extends JDialog {
public VD3_Dialog (JFrame parent, boolean modal) {
super(parent, modal);
initComponents();
}
public String getValue() {
return jtxtValue.getText();
}
public void setValue(String s) {
jtxtValue.setText(s);
}
private void initComponents() {

}
private void jbtnOKActionPerformed(java.awt.event.ActionEvent evt) {
this.dispose();
}
private JLabel jLabel1;
private JButton jbtnOK;
private JTextField jtxtValue;
} 138
package demoswing;
import javax.swing.*;
public class DemoSWING {
public static void main(String[] args) {
JFrame f = new VD3_Frame();
f.setVisible(true);
}
}

139
➢ JDesktopPane:
– Sử dụng để xây dựng ưng dụng MDI
– Là một thành phần bên trong JFrame
– Thường được dùng để chứa các JJnternalFrame
➢ JInternalFrame: được sử dụng để đưa các
InternalFrame vào bên trong JDesktopPane của
JFrame.
➢ Các bước xây dựng ứng dụng MDI:
– Xây dựng các JInternalFrame
– Tạo một JFrame có chứa JDesktopPane
– Gắn JInterFrame vào trong JDesktopPane 140
141
➢ Look and Feel là một tính năng của Java Swing
giúp người dùng có thể thay đổi toàn bộ giao
diện của ứng dụng theo ý muốn một cách
nhanh chóng, dễ dàng.
– Look đại diện cho thành phần GUI bên ngoài
của các component.
– Feel đại diện cho phần behave (hành xử), ví dụ
như hiệu ứng khi click, hover…
➢ Về cơ bản có 2 loại Look and Feel
– Skinable
– Non-skinable 142
➢ Java cung cấp các Look and Feel (LaF) sau:
– CrossPlatformLookAndFeel: còn được gọi là Java
LaF hay Metal LaF, LaF này tạo ra giao diện
giống nhau trên tất cả các nền tảng. Đây là LaF
mặc định nếu không chỉ ra LaF trong code.
– SystemLookAndFeel: là LaF riêng của nền tảng
mà ứng dụng đang chạy, được xác định lúc
thực thi (runtime).
– Synth: cho phép tạo ra LaF riêng.
– Multiplexing: cho phép sử dụng nhiều LaF cùng
lúc.
143
➢ Thay đổi Look and Feel:
UIManager.setLookAndFeel(lafName);
SwingUtilities.updateComponentTreeUI(frame);
frame.pack();

144
➢ Sử dụng GTK Look and Feel
lafName = “com.sun.java.swing.plaf.
gtk.GTKLookAndFeel”;
➢ Sử dụng Windows Look and Feel
lafName = “com.sun.java.swing.plaf.
windows.WindowsLookAndFeel”;

145
➢ Sử dụng Motif Look and Feel
lafName = “com.sun.java.swing.plaf.
motif.MotifLookAndFeel”;
➢ Sử dụng Metal Look and Feel
lafName = “com.sun.java.swing.plaf.
metal.MetalLookAndFeel”;

146
➢ Look & Feel SeaGlass (Apache-licensed)

147
➢ Look & Feel Liquid (GLPL)

148
➢ Look & Feel Nimbus (included with JRE1.6u10+)

149
➢ Look & Feel BizLaf (Commercial)

150
➢ Look & Feel Synthetica (Commercial)

151

You might also like