Container contentPane = getContentPane; contentPane.setLayoutnew FlowLayout; 14/02/08 Bài gi ng dành cho sinh viên Tr ng Cao đ ng Công ngh 14 BorderLayout Container contentPane = getCont
Trang 1L p trình Java II
Ch ng I
L p trình GUI v i Swing
Biên so n: ThS Nguy n V n Lành
14/02/08 Bài gi ng dành cho sinh viên Tr ng Cao đng Công ngh 2
M c tiêu
̈ Hoàn thành ch ng n y, sinh viên ph i đ t
đ c nh ng đ i m sau:
̈ Hi u c u trúc và n m v ng k n ng l p trình t ch c
1 giao di n ng i dùng đ h a trong Java
̈ Bi t cách l p trình tùy bi n các đ i t ng GUI trong
th vi n Swing
̈ Hi u c ch x lý s ki n t ng tác ng i dùng và
n m v ng k n ng l p trình phát tri n các đ i t ng
x lý s ki n.
̈ K n ng t tìm hi u và s d ng các GUI component
có s n trong th vi n
đ
N i dung
̈ Gi i thi u chung v AWT & Swing
̈ C u trúc chung c a các giao di n GUI
̈ Các l p v t ch a & trình qu n lý layout
̈ Các thành ph n GUI c b n
̈ C ch x lý s ki n t ng tác ng i
dùng
̈ Các l p listener c b n & cách tùy bi n
đ
I Gi i thi u chung v AWT & Swing
̈ AWT: Abstract Windows Toolkit
̈ Th vi n API cung c p các đ i t ng GUI
̈ T o liên k t giao di n
gi a ng d ng Java và OS
̈ Heavy-weight component
̈ Package java.awt
Trang 214/02/08 Bài gi ng dành cho sinh viên Tr ng Cao đ ng Công ngh 5
I Gi i thi u chung v AWT & Swing
̈ T o giao di n nh t quán đ c l p v i môi tr ng
(cross-platform GUI)
̈ Light-weight component v i nhi u đ c đi m
nâng c p.
̈ pluggable look and feel
̈ Có kh n ng tùy bi n t i th i đi m runtime
̈ Không s d ng tr n l n AWT và Swing GUI
component trên cùng 1 giao di n.
̈ Package javax.swing
14/02/08 Bài gi ng dành cho sinh viên Tr ng Cao đ ng Công ngh 6
I Gi i thi u chung v AWT & Swing
̈ Thi t k theo ý t ng mô hình MVC (Model-View- Controller) và mô hình thành
ph n (component model)
̈ T ng tác gi a ng i dùng và giao di n GUI đi u khi n b i controller
̈ Standard Widget Toolkit (SWT) là s n ph m công ngh t ng ng c a IBM – tích h p trong Eclipse IDE
I Gi i thi u chung v AWT & Swing
̈ C u trúc giao di n GUI : t ch c các đ i
t ng GUI trên 1 v t ch a(container) qu n
lý b i trình qu n lý b trí (layout manager)
I Gi i thi u chung v AWT & Swing
̈ Các thành ph n Swing k th a t l p c s JComponent
Trang 314/02/08 Bài gi ng dành cho sinh viên Tr ng Cao đ ng Công ngh 9
II Các l p v t ch a
̈ Giao di n GUI đ c trình bày trên 1 v t
ch a đ c t ch c phân c p
̈ Top level container: JFrame, JDialog, Japplet
̈ Intermediate container :JPanel,
JScrollPane, JTabbedPane
̈ Container c p cao qu n lý gián ti p các
container trung gian cho phép t ch c
giao di n theo chi u sâu Z-oderring
14/02/08 Bài gi ng dành cho sinh viên Tr ng Cao đ ng Công ngh 10
II Các l p v t ch a
̈ JFrame là 1 c a s có khung, có tiêu đ
và các nút đi u khi n dùng hi n th giao
di n ng d ng Java đ c l p
̈ JDialog:
̈ H p tho i có vi n khung và tiêu đ , ph i có 1 frame ho c dialog làm owner, t đ ng thu
nh ho c hi n th theo owner
̈ Modal ho c modeless
̈ JApplet : t o giao di n GUI cho ng d ng nhúng
đ ng Công ngh
II Các l p v t ch a
̈ Các l p container c p cao:
̈ Qu n lý các đ i t ng qua trung gian rootPane và
contentPane
̈ S d ng Content Pane là v t ch a tr c ti p các đ i
t ng GUI khác.
̈ Các container trung gian
̈ S d ng trình qu n lý layout manager đ b trí và
qu n lý các đ i t ng trên GUI khi có s thay đ i
ho c di chuy n container
đ ng Công ngh
II Trình qu n lý layout
̈ M i v t ch a s d ng layout manager đ
qu n lý v trí và kích th c các thành
ph n GUI b trí trên v t ch a
̈ 5 l p layout manager th ng dùng:
BorderLayout, BoxLayout, FlowLayout, GridBagLayout, and GridLayout.
̈ Khi b trí 1 đ i t ng GUI trên container
ph i chú ý lo i layout đang s d ng
Trang 414/02/08 Bài gi ng dành cho sinh viên Tr ng Cao đ ng Công ngh 13
II Trình qu n lý layout
̈ Content-pane c a các v t ch a đ c m c đ nh
s d ng 1 lo i layout
̈ JFrame, JDialog, JApplet: BorderLayout
̈ JPanel: FlowLayout
̈ Thi t l p layout trên 1 container
̈ setLayout(LayoutManager l)
̈ setLayout(null): t qu n lý layout: đ nh v tuy t đ i
̈ Implements LayoutManager đ qu n lý layout cho
các giao di n GUI tùy ý.
Container contentPane = getContentPane();
contentPane.setLayout(new FlowLayout());
14/02/08 Bài gi ng dành cho sinh viên Tr ng Cao đ ng Công ngh 14
BorderLayout
Container contentPane = getContentPane();
contentPane.add(new JButton("Button 1 (NORTH)"), BorderLayout.NORTH); contentPane.add(new JButton("2 (CENTER)"), BorderLayout.CENTER); contentPane.add(new JButton("Button 3 (WEST)"), BorderLayout.WEST); contentPane.add(new JButton("Long-Named Button 4 (SOUTH)"), BorderLayout.SOUTH);
contentPane.add(new JButton("Button 5 (EAST)"), BorderLayout.EAST);
BoxLayout
̈ B trí top to bottom|left to right
̈ Tôn tr ng kích th c t i đa và
X/Y alignment.
JPanel buttonPane = new JPanel();
buttonPane.setLayout(new
BoxLayout(buttonPane,
BoxLayout.X_AXIS));
buttonPane.setBorder(BorderFactory.createEm
ptyBorder(0, 10, 10, 10));
buttonPane.add(Box.createHorizontalGlue());
buttonPane.add(cancelButton);
buttonPane.add(Box.createRigidArea(new
S d ng
Box.Filler(minSize, prefSize, maxSize));
đ đi n đ y kho ng cách gi a các đ i
t ng
Boxlayout
̈ BoxLayout chú ý các yêu c u minimum, preferred, and maximum size c a các component
comp.setMinimumSize(new Dimension(50, 25));
comp.setPreferredSize(new Dimension(50, 25));
comp.setMaximumSize(new Dimension(200,200));
Trang 514/02/08 Bài gi ng dành cho sinh viên Tr ng Cao đ ng Công ngh 17
FlowLayout
public FlowLayout()
public FlowLayout(int alignment)
public FlowLayout(int alignment,int horizontalGap, int verticalGap)
+ i s nh n giá tr FlowLayout.LEFT,
FlowLayout.CENTER, or FlowLayout.RIGHT
+ horizontalGap and verticalGap ch ra kho ng cách pixels
gi a các component.
14/02/08 Bài gi ng dành cho sinh viên Tr ng Cao đ ng Công ngh 18
GridLayout
public GridLayout(int rows, int columns) public GridLayout(int rows, int columns, int horizGap, int vertGap) – ph i có ít nh t colúmn ho c rows khác 0
đ ng Công ngh
GridBagLayout
̈ B trí component tr i trên nhi u hàng và c t v i
kích th c khác nhau
̈ Thi t l p 1 m ng l i ô liên
k t v i container và b trí
các component trên 1 ho c
nhi u ô
đ ng Công ngh
LayoutManager interface
̈ public void layoutContainer(Container parent)
̈parent là container c n qu n lý
̈Hàm setBounds() đ c g i cho m i component
đ c đ a vào parent, v trí c a m i component nên đ c xác đ nh theo công th c t ng đ i so
v i kích th c c a parent
̈ Là ph ng án qu n lý layout t t v i các container ch a ít component
Trang 614/02/08 Bài gi ng dành cho sinh viên Tr ng Cao đ ng Công ngh 21
III Các thành ph n GUI c b n
̈ JComponent
̈ JComponent là l p c s abstract c a t t c các
Swing components (có tên b t đ u ch J – ngo i tr
top-container)
̈ K th a t Component và Container
̈ óng gói h u h t các đ c đi m và thao tác c b n
c a 1 thành ph n GUI
̈ Setting borders and boundering
̈ Request focus and keystroke handling
̈ Aligning, scrolling, resizing behaviour
̈ Tooltip, listener, double buffering
14/02/08 Bài gi ng dành cho sinh viên Tr ng Cao đ ng Công ngh 22
JComponent methods
Trang 714/02/08 Bài gi ng dành cho sinh viên Tr ng Cao đ ng Công ngh 25
JComponent methods - painting
14/02/08 Bài gi ng dành cho sinh viên Tr ng Cao đ ng Công ngh 26
JComponent methods - Containment
đ ng Công ngh
JComponent methods - Layout
đ ng Công ngh
JComponent methods - Layout
Trang 814/02/08 Bài gi ng dành cho sinh viên Tr ng Cao đ ng Công ngh 29
JComponent methods - Absolute Size and Position
14/02/08 Bài gi ng dành cho sinh viên Tr ng Cao đ ng Công ngh 30
III Các thành ph n GUI c b n
̈ JTextField
̈ JLabel
̈ JPasswordField
̈ JTextArea
̈ JComboBox
̈ JButton
̈ JCheckBox
̈ JRadioButton
̈ Hàm d ng, các hàm getXXX, gán Listener
IV C ch x lý s ki n
̈ T ng tác GUI – user đ c bi u di n và x lý
trên c s mô hình y thác (delegation model)
̈ Event: s ki n t ng tác ( kích chu t)
̈ Event source: n i phát sinh s ki n (button)
̈ Event Listener: đ i t ng đ c y quy n x lý s
ki n.
̈ Khi m t s ki n di n ra, listener- là đ i t ng
đ c y thác đ x lý - s tri u g i 1 hàm x lý
s ki n t ng ng
IV.2 Các lo i s ki n
̈ Event c p th p
̈ Event
̈ AWTEvent
̈ KeyEvent
̈ MouseEvent
̈ WindowEvent
̈ Event c p cao: semantic event
̈ FocusEvent
̈ ActionEvent
̈ public Object getSource()
̈ public String getActionCommand()
Trang 914/02/08 Bài gi ng dành cho sinh viên Tr ng Cao đ ng Công ngh 33
IV.3 Các l p listener
̈ T ng ng v i m i lo i event, listener t ng
ng đ c đ ng ký đ x lý event
JButton b= new JButton(“OK”);
b.addActionListener(new OKListener());
̈ Các l p Listener đ c phát tri n theo các
khuôn m u interface đã đ nh ngh a
̈ ActionListener
̈ KeyListener
̈ MouseListener
̈ FocusListener …
̈ Ng i l p trình vi t mã cho các hàm x lý.
14/02/08 Bài gi ng dành cho sinh viên Tr ng Cao đ ng Công ngh 34
Tóm t t
̈ C u trúc và cách t ch c giao di n ng
d ng GUI
̈ S d ng các l p layout manager
̈ S d ng và tùy bi n các GUI component
̈ T ch c x lý s ki n
đ ng Công ngh
Tài li u tham kh o
̈ Ch ng 7 – Core Java -Vol I
̈ Swing tutorial – link trên WEBCT
̈ Các ví d và bài t p – link trên WEBCT
̈ Bài t p th c hành
̈ Vi t ng d ng hi n th dòng ch “Welcome to
Swing” chính gi a c a s B trí 2 button
cu i màn hình nút T ng và Gi m – khi ng i
s d ng click vào thì c ch hi n th t ng
ho c gi m t ng ng.