Đ tài 10. L p trình giao di n đ h a GUIề ậ ệ ồ ọ
I. Gi i thi u AWT ớ ệ
Abstract Windows Toolkit – AWT: Là th vi n c a Java cung c p cho l p trình viên cácư ệ ủ ấ ậ
gi i pháp giao di n ng i dùng đ ho (Graphical User Interface - GUI) thân thi n.ả ệ ườ ồ ạ ệ
M t giao di n ng i dùng đ c hình thành t các ph n t c a GUI. M t ph n t GUIộ ệ ườ ượ ừ ầ ử ủ ộ ầ ử
đ c thi t l p b ng cách s d ng các th t c:ượ ế ậ ằ ử ụ ủ ụ
1. T o đ i t ng.ạ ố ượ
2. Xác đ nh s xu t hi n ban đ u c a đ i t ng.ị ự ấ ệ ầ ủ ố ượ
3. Ch ra nó n m đâu.ỉ ằ ở
4. Thêm ph n t vào giao di n trên màn hình.ầ ử ệ
Đ làm vi c v i các đ i t ng GUI chúng ta c n nh p gói java.awt.*.ể ệ ớ ố ượ ầ ậ
AWT cung c p các thành ph n khác nhau đ t o GUI hi u qu , các thành ph n này cóấ ầ ể ạ ệ ả ầ
th là:ể
• V t ch a (Container).ậ ứ
• Thành ph n (Component).ầ
• Trình qu n lý cách trình bày (Layout manager).ả
• Đ ho (Graphics) và các tính năng v (draw).ồ ạ ẽ
• Phông ch (Font).ữ
• S ki n (Event).ự ệ
T phiên b n 1.4, Java phát tri n m t th vi n m r ng m i v i đa s các l p GUI kừ ả ể ộ ư ệ ở ộ ớ ớ ố ớ ế
th a t AWT nh ng có kh năng di đ ng t t h n. Các l p GUI trong swing có thêm ti n t “J”ừ ừ ư ả ộ ố ơ ớ ề ố
so v i các l p trong AWT. Sau đây, chúng ta s xét các thành ph n GUI trong swing.ớ ớ ẽ ầ
S đ phân c p th a k các đ i t ng GUI trong swing nh sau:ơ ồ ấ ừ ế ố ượ ư
114
II. V t ch a (Container)ậ ứ
Là vùng mà ta có th đ t các thành ph n (component) c a giao di n. M t v t ch a cóể ặ ầ ủ ệ ộ ậ ứ
th ch a nhi u ph n t . V t ch a th ng đ c s d ng là:ể ứ ề ầ ử ậ ứ ườ ượ ử ụ
• JPanel - khung ch a đ n gi n nh t, đ nhóm các đ i t ng con l i và s p x pứ ơ ả ấ ể ố ượ ạ ắ ế
theo cách thích h p.ợ
• JFrame - là m t c a s nh m i ng d ng c a windows, đ t o các ng d ngộ ử ổ ư ọ ứ ụ ủ ể ạ ứ ụ
windows.
II.2 JPanel
JPanel không th nhìn th y tr c ti p, nó là đ i t ng dùng đ ch a các thành ph nể ấ ự ế ố ượ ể ứ ầ
GUI trên màn hình. Do đó chúng ta c n g n JPanel vào đ i t ng nào đó nh : JFrame, JApplet,ầ ắ ố ượ ư
...
T o khung ch a JPanel b ng ph ng th c kh i t o: JPanel panel1 = new JPanel();ạ ứ ằ ươ ứ ở ạ
115
Ví d sau t o m t đ i t ng JPanel và đ t vào nó m t đ i t ng nút b m JButton. ụ ạ ộ ố ượ ặ ộ ố ượ ấ
import javax.swing.*;
public class FrameSample {
public static void main(String[] argvs)
{
JFrame f = new JFrame();
JPanel p = new JPanel();
p.add(new JButton("OK"));
f.add(p); // g n JPanel vào JFrame ắ
f.setSize(400,400);
f.setVisible(true);
}
}
II.3 JDialog
Nh JFrame, nh ng ít ch c năng h n, còn đ c g i là popup-window.ư ư ứ ơ ượ ọ
Ta có th t o JDialog d i hai hình th c:ể ạ ướ ứ
• modal: là c a s JDialog khi th c hi n s khoá ch t các c a s khác. C a sử ổ ự ệ ẽ ặ ử ổ ử ổ
này th ng yêu c u m t tác v nào đó c n ph i hoàn thành ngay.ườ ầ ộ ụ ầ ả
• non-modal: ng c l i v i modal, c a s này thích ng v i các thao tác mangượ ạ ớ ử ổ ứ ớ
tính tuỳ bi n. ế
Cách t o khung ch a JDialog t ph ng th c kh i t o: ạ ứ ừ ươ ứ ở ạ
public JDialog(JFrame parentWindow, boolean isModal);
trong đó: isModal - quy t đ nh xem JDialog đ c t o ra d ng nào: isModal = true choế ị ượ ạ ở ạ
modal còn isModal = false cho non-modal.
d.setVisible(!d.isVisible());
}
}
);
p.add(b);
add(p);
}
public static void main(String[] argvs)
{
FrameSample fs = new FrameSample();
fs.setSize(400,400);
fs.setVisible(true);
}
}
117
II.4 JScrollPane
Đây không ph i là m t c a s nh ng có tính ch t nh khung ch a JPanel dùng đ ch aả ộ ử ổ ư ấ ư ứ ể ứ
các đ i t ng. Tính ch t khác là khi đ i t ng nó ch a quá l n thì JScrollPane s xu t hi nố ượ ấ ố ượ ứ ớ ẽ ấ ệ
thanh tr t đ ng và ngang hai bên vi n đ ta có th xem đ c toàn b . JScrollPane đ cượ ứ ở ề ể ể ượ ộ ượ
ng d ng trong các danh sách ch n.ứ ụ ọ
III. Gi i thi u v các thành ph n GUI c b nớ ệ ề ầ ơ ả
• Jlabel: Ch m t vùng hi n th văn b n ho c các icon.ỉ ộ ể ị ả ặ
• JtextField: Ch m t đ i t ng cho phép nh p d li u t bàn phím.ỉ ộ ố ượ ậ ữ ệ ừ
• JButton: Đ i t ng nút b mố ượ ấ
• JcheckBox: Đ i t ng nút ch n.ố ượ ọ
• JcomboBox: Đ i t ng ComboBoxố ượ
• Jlist: Danh sách
• JPanel: N i đ t các thành ph n GUI nói trên.ơ ặ ầ
III.1 Nút nh n ấ
Cách t o nút nh nạ ấ
public class LabelTest extends JFrame {
private JLabel label1, label2, label3;
// T o giao di n GUIạ ệ
public LabelTest()
{
super( "Testing JLabel" ); // Contructor c a JFrameủ
// L y đ i t ng pane c a m t JFrameấ ố ượ ủ ộ
Container container = getContentPane();
container.setLayout( new FlowLayout() );
// constructor c a JLabelủ
label1 = new JLabel( "Label with text" );
label1.setToolTipText( "This is label1" ); // hi n th khi di chu t đ nể ị ộ ế
container.add( label1 ); // thêm vào container
// T o Jlabel v i icon ho c textạ ớ ặ
Icon bug = new ImageIcon( "bug1.gif" );
label2 = new JLabel( "Label with text and icon", bug, SwingConstants.LEFT );
label2.setToolTipText( "This is label2" );
container.add( label2 );
// JLabel không tham số
label3 = new JLabel();
label3.setText( "Label with icon and text at bottom" );
label3.setIcon( bug );
label3.setHorizontalTextPosition( SwingConstants.CENTER );
label3.setVerticalTextPosition( SwingConstants.BOTTOM );
label3.setToolTipText( "This is label3" );
container.add( label3 );
setSize( 275, 170 );
setVisible( true );
}
// hàm main
import java.awt.event.*;
// Java extension packages
import javax.swing.*;
public class CheckBoxTest extends JFrame {
private JTextField field;
private JCheckBox bold, italic;
// Thi t l p GUIế ậ
public CheckBoxTest()
{
super( "JCheckBox Test" );
// l y paneấ
Container container = getContentPane();
container.setLayout( new FlowLayout() );
// Đ t ô nh p và font chặ ậ ữ
field = new JTextField( "Theo dõi font ch thay đ i", 20 );ữ ổ
field.setFont( new Font( "Serif", Font.PLAIN, 14 ) );
container.add( field );
// t o đ i t ng checkboxạ ố ượ
bold = new JCheckBox( "Bold" );
container.add( bold );
italic = new JCheckBox( "Italic" );
container.add( italic );
// Đăng ký đ i t ng l ng ngheố ượ ắ
CheckBoxHandler handler = new CheckBoxHandler();
bold.addItemListener( handler );
italic.addItemListener( handler );
setSize( 275, 100 );
setVisible( true );
}
// execute application
Ta t o m t đ i t ng giao ti p ItemListener đ l ng nghe tình hu ng.ạ ộ ố ượ ế ể ắ ố
Ph ng th c getItemSelectable s tr v đ i t ng n i mà tình hu ng phát sinh:ươ ứ ẽ ả ề ố ượ ơ ố
public ItemSelectable getItemSelectable();
Ph ng th c getItem c a đ i t ng ItemEvent s cho ta bi t giá tr nút ch n:ươ ứ ủ ố ượ ẽ ế ị ọ
public Object getItem();
Sau đây là ví d v s d ng ô ch n:ụ ề ử ụ ọ
// Đăng ký đ i t ng l ng nghe cho m i ô ch n radioố ượ ắ ỗ ọ
RadioButtonHandler handler = new RadioButtonHandler();
plainButton.addItemListener( handler );
boldButton.addItemListener( handler );
italicButton.addItemListener( handler );
boldItalicButton.addItemListener( handler );
// Nhóm các ô l iạ
radioGroup = new ButtonGroup();
radioGroup.add( plainButton );
radioGroup.add( boldButton );
radioGroup.add( italicButton );
radioGroup.add( boldItalicButton );
V b t các s ki n cũng t ng t ô đánh d u.ề ắ ự ệ ươ ự ấ
III.5 H p tho i Combo ộ ạ
Java h tr h p tho i Combo thông qua đ i t ng c a class JComboBox. Đây là m tỗ ợ ộ ạ ố ượ ủ ộ
danh sách x xu ng, đ a ra m t danh sách các m c và ta ch đ c ch n 1 m c trong đó.ổ ố ư ộ ụ ỉ ượ ọ ụ
JComboBox cũng phát sinh s ki n ItemEvent gi ng nh JRadioButton và JCheckBox. ự ệ ố ư
Ch ng trình sau đây minh h a vi c s d ng JComboBox v i các ph n t là các nhươ ọ ệ ử ụ ớ ầ ử ả
GIF.
// Java core packages
import java.awt.*;
import java.awt.event.*;
// Java extension packages
import javax.swing.*;