27
BÀI T P NHÓM NHÓM 3 L P TRÌNH GIAO DI N V I SWING Vũ Duy Khánh Đ ng Thanh Hà Nguy n Đình Th nh Nguy n Duy H ng ư I. T ng quan v swing 1.Gi i thi u v Swing Swing là th vi n l p trình m r ng c a java. Nó m r ng các đ i t ng giao di n đ ha ư ởộ ởộ ượ c b n c a java. Swing còn đ c g i là th vi n JEC (Java Foundations Class). Khi mu n ơ ượ ư s d ng các đ i t ng đ h a c a th vi n này, ta ph i khai báo ch th : ượ ư Import javax.swing.*; 2. T i sao l i s d ng Swing? Swing là gói con đ c k th a và phát tri n t gói giao di n awt – 1 gói giao di n đ i đ u. ượ ế Swing s d ng nh ng th vi t t vi t đ c l p v i h th ng do đó tính n đ nh cao, lo i b ư ế ế đ c nh c đi m c a awt là ph thu c vào h th ng d n đ n nh ng k t qu khác nhau ượ ượ ế ế nh ng h đi u hành khác nhau . 3. Các gói và các l p Swing 3.1. javax.accessibility Ch a các l p và các giao ti p mà có th đ c s d ng cho phép công ngh tr giúp đ ế ượ t ng tác v i các thành ph n c a Swing. Các công ngh tr giúp đ c p 1 dãy các item, t ươ b đ c văn b n đ n phóng đ i màn hình. M c dù các l p accessibility là nh ng công ngh ế không thu c các thành ph n Swing nh ng chúng đ c s d ng m r ng thông qua các ư ượ ởộ thành ph n Swing. 3.2. javax.swing

Bao Cao Java Swing 3754

  • Upload
    tao-do

  • View
    480

  • Download
    2

Embed Size (px)

Citation preview

Page 1: Bao Cao Java Swing 3754

BÀI T P NHÓMẬ

NHÓM 3

L P TRÌNH GIAO DI N V I SWINGẬ Ệ Ớ

• Vũ Duy Khánh

• Đ ng Thanh Hàặ

• Nguy n Đình Th nhễ ị

• Nguy n Duy H ngễ ư

I. T ng quan v swingổ ề1.Gi i thi u v Swingớ ệ ềSwing là th vi n l p trình m r ng c a java. Nó m r ng các đ i t ng giao di n đ h aư ệ ậ ở ộ ủ ở ộ ố ượ ệ ồ ọ c b n c a java. Swing còn đ c g i là th vi n JEC (Java Foundations Class). Khi mu nơ ả ủ ượ ọ ư ệ ố s d ng các đ i t ng đ h a c a th vi n này, ta ph i khai báo ch th :ử ụ ố ượ ồ ọ ủ ư ệ ả ỉ ịImport javax.swing.*;2. T i sao l i s d ng Swing?ạ ạ ử ụSwing là gói con đ c k th a và phát tri n t gói giao di n awt – 1 gói giao di n đ i đ u.ượ ế ừ ể ừ ệ ệ ờ ầ Swing s d ng nh ng th vi t t vi t đ c l p v i h th ng do đó tính n đ nh cao, lo i bử ụ ữ ư ế ự ế ộ ậ ớ ệ ố ổ ị ạ ỏ đ c nh c đi m c a awt là ph thu c vào h th ng d n đ n nh ng k t qu khác nhau ượ ượ ể ủ ụ ộ ệ ố ẫ ế ữ ế ả ở nh ng h đi u hành khác nhau .ữ ệ ề3. Các gói và các l p Swingớ3.1. javax.accessibilityCh a các l p và các giao ti p mà có th đ c s d ng cho phép công ngh tr giúp đứ ớ ế ể ượ ử ụ ệ ợ ể t ng tác v i các thành ph n c a Swing. Các công ngh tr giúp đ c p 1 dãy các item, tươ ớ ầ ủ ệ ợ ề ậ ừ b đ c văn b n đ n phóng đ i màn hình. M c dù các l p accessibility là nh ng công nghộ ọ ả ế ạ ặ ớ ữ ệ không thu c các thành ph n Swing nh ng chúng đ c s d ng m r ng thông qua cácộ ầ ư ượ ử ụ ở ộ thành ph n Swing.ầ3.2. javax.swing

Page 2: Bao Cao Java Swing 3754

Ch a các thành ph n c t lõi c a Sswing, bao g m h u h t các mô hình giao ti p và các l pứ ầ ố ủ ồ ầ ế ế ớ h trỗ ợ3.3. javax.swing.borderCh a đ nh nghĩa các l p đ ng vi n tr u t ng cũng nh 8 đ ng vi n đ c đ nh nghĩa.ứ ị ớ ườ ề ừ ượ ư ườ ề ượ ị Border không ph i là nh ng thành ph n, thay vì th , chúng là nh ng y u t đ h a đ c bi tả ữ ầ ế ữ ế ố ồ ọ ặ ệ mà Swing s d ng nh nh ng thu c tính và đ t chúng xung quanh các thành ph n. N uử ụ ư ữ ộ ặ ầ ế nh b n t o ra border c a riêng b n, b n có th t o l p con t nh ng border có s n trongư ạ ạ ủ ạ ạ ể ạ ớ ừ ữ ẵ gói này, ho c b n có th vi t mã cho m t l p m iặ ạ ể ế ộ ớ ớ3.4. javax.swing.colorchooserH tr cho thành ph n JcolorChooserỗ ợ ầ3.5. java.swing.eventĐ nh nghĩa nh ng listener m i và nh ng event mà nh ng thành ph n Swing s d ng đị ữ ớ ữ ữ ầ ử ụ ể giao tieeos thông tin v i các classớ3.6. javax.swing.filechooserH tr cho thành ph n JfileChooserỗ ợ ầ3.7. javax.swing.plafĐ nh nghĩa nh ng y u t d ng nh t t o nên c m quan (Look And Feel) cho m i thành ph nị ữ ế ố ụ ấ ạ ả ỗ ầ Swing. Trong gói này ch a các gói con là javax.swing.plaf.basic, javax.swing.plaf.metal vàứ javax.swing.plaf.multi3.8. javax.swing.tableCung c p các mô hình và quan sát cho thành ph n table, cho phép b n s p x p thông riêngấ ầ ạ ắ ế bi t trong đ nh d ng l i v i s xu t hi n t ng t nh b ng tínhệ ị ạ ướ ớ ự ấ ệ ượ ự ư ả3.9. javax.swing.textCung c p các đi m c a các l p và giao ti p d a trên văn b n h tr thi t k thông d ngấ ể ủ ớ ế ự ả ỗ ợ ế ế ụ đ c bi t đ n nh document/viewượ ế ế ư3.10. javax.swing.test.htmlS d ng kĩ thu t đ c và đ nh d ng văn b n HTMLử ụ ậ ọ ị ạ ả3.11. javax.swing.text.html.parserH tr vi c phân tích HTMLỗ ợ ệ3.12. javax.swing.text.hfS d ng kĩ thu t đ c và đ nh d ng Rich Text Formayử ụ ậ ọ ị ạ3.13. javax.swing.treeĐ nh nghĩa các mô hình và quan sát thành ph n m t cây phân c p, có th thay th m t c uị ầ ộ ấ ể ế ộ ấ trúc file ho c m t dã các thu c tínhặ ộ ộ3.14. javax.swing.undoCh a nh ng ch c năng c n thi t cho vi c b sung ch c năng undoứ ữ ứ ầ ế ệ ổ ứII. Các thành ph n trong swingầN I DUNGỘ

+ Giao di n ng i dùng v i Java (Java GUI)ệ ườ ớ

Page 3: Bao Cao Java Swing 3754

+ Các Container : JFrame, JPanel, Jdialog+ Các component: Jlabel, Jtextfield, Jbutton, JComboBox, JcheckBox, JradioButton+ Layout manager: FlowLayout, GridLayout, BorderLayout, …+ T o menuạ

1. GIAO DI N NG I DÙNG V I JAVAỆ ƯỜ Ớ+ Cung c p các công c cho phép t o giao ti p tr c quan và h p d n v i ng i dùng,ấ ụ ạ ế ự ấ ẫ ớ ườ đ c bi t đ n là swingượ ế ế+ Giao di n v i ng i dùng bao g m 1 c a s chính và các control đ c đ t lênệ ớ ườ ồ ử ổ ượ ặ trên+ Các thành ph n t o giao di n n m trong gói javax.swingầ ạ ệ ằ+ Tên c a các l p này b t đ u b ng ch Jủ ớ ắ ầ ằ ữ

Hình 1.1

1.1 JFrame+ Đây là c a s chính dùng đ ch a các thành ph n giao di n khác. Đóng vai trò là 1ử ổ ể ứ ầ ệ container+ JFrame th ng dùng đ t o ra c a s trong ch ng trình swingườ ể ạ ử ổ ươ+ Kh i t oở ạ

JFrame(); T o m t frame nh ng không hi n th (invisible)ạ ộ ư ể ịJFrame(String title); T o m t frame không hi n th , có tiêu đ .ạ ộ ể ị ề

+ Các thành ph n đ h a đ c đ a vào content pane, không đ a tr c ti p vào đ iầ ồ ọ ượ ư ư ự ế ố t ng JFrameượ

+ Ví d :ụCh ng trình sau minh ho cách t o m t JFrame.ươ ạ ạ ộ

import javax.swing.*;class FrameDemo{

public static void main(String args[]){

JFrame f=new JFrame (“I have been Frameed!!!”);f.setSize(300,200);f.setVisible(true);

Page 4: Bao Cao Java Swing 3754

}}

K t xu t c a ch ng trình gi ng nh hình d iế ấ ủ ươ ố ư ướ

JPanel+ JPanel là container trung gian dùng đ ch a các conponent khácể ứ+ Th ng dùng đ phân chia các component trong ng d ngườ ể ứ ụ+ Layout m c đ nh là FlowLayoutặ ị+ Kh i t o:ở ạ

JPanel(); T o JPanel m i không tiêu đạ ớ ềJPanel(LayoutManager layout); T o JPanel m i có ki u Layout là layoutạ ớ ể

Ch ng trình sau ch ra cách t o m t JPanel:ươ ỉ ạ ộ

import javax.swing.*;class Paneltest{

public static void main(String args[]){

JPanel p = new JPanel ();JFrame f = new JFrame(“Testing a Panel”);f.add(p);f.setSize(300,200);f.setVisible(true);

}}

JPanel không th đ c nhìn th y tr c ti p. Do đó, chúng ta c n thêm panel đ n m t frame.ể ượ ấ ự ế ầ ế ộ Vì v y ta c n t o m t JFrame m i và thêm JPanel m i đ c t o này vào đó. ậ ầ ạ ộ ớ ớ ượ ạK t xu t c a ch ng trình:ế ấ ủ ươ

Page 5: Bao Cao Java Swing 3754

JDialogL p JDialog t ng t nh l p JFrame, nghĩa là JDialog là l p con c a l p Window.ớ ươ ự ư ớ ớ ủ ớ Đ i t ng dialog đ c t o nh sau:ố ượ ượ ạ ư

JFrame myframe=new JFrame(“My frame”);String title = “Title”;boolean modal = true;JDialog dlg=new JDialog(myframe, title, modal);

Tham s modal ch ra r ng dialog s ngăn ch n b t kỳ t ng tác nào x y đ n v i cácố ỉ ằ ẽ ặ ấ ươ ả ế ớ c a s đ c m khác, trong khi dialog đang đ c hi n th trên màn hình. Ki u h pử ổ ượ ở ượ ể ị ể ộ tho i này ngăn ch n ng i dùng t ng tác v i các c a s khác (c a cùng ng d ng)ạ ặ ườ ươ ớ ử ổ ủ ứ ụ trên màn hình, cho t i khi dialog đ c đóng l i.ớ ượ ạ

2. CÁC THÀNH PH N GIAO TI P NG I DÙNG C B NẦ Ế ƯỜ Ơ Ả+ Form đ c dùng đ thu th p thông tin tù phía ng i dùngượ ể ậ ườ+ Trong khi giao ti p, component đ c dùng đ cho phép nh p li u là TextField ho cế ượ ể ậ ệ ặ TextBox+ Đ kh i t o các ph n t , các b c c n ph i th c hi n là:ể ở ạ ầ ử ướ ầ ả ự ệ

T o ph n tạ ầ ửThi t l p các thu c tính (size, color, font, …)ế ậ ộĐ a nó vào màn hìnhư

Các lo i componentạ

Page 6: Bao Cao Java Swing 3754

Hình 2.1JLabel

+ Đ c dùng đ hi n th văn b n (text) và hình nh (image)ượ ể ệ ị ả ả+ T o hi u ng tr c quan cho màn hình giao di nạ ệ ứ ự ệ+ Các hàm kh i t o:ở ạ

JLabel(); T o JLabel tr ngạ ốJLabel(String st); T o JLabel v i n i dung là stạ ớ ộJLabel(Icon img); T o JLabel n i dung là hình nh imgạ ộ ảJLabel(int align); T o m t JLabel v i m t ch đ canh l (alignment) , canhạ ộ ớ ộ ế ộ ề l có th là JLabel.LEFT, JLabel.RIGHT hay JLabel.CENTER.ề ể

Các ph ng th c đ c s d ng ph bi n c a label đ c trình bày b ng bên d i:ươ ứ ượ ử ụ ổ ế ủ ượ ở ả ướPh ng th cươ ứ Ch c năng ứsetFont(Font f) Thay đ i phông ch c a JLabelổ ữ ủsetText(String s) Thi t l p nhãn cho Jlabelế ậgetText() L y n i dung hi n t i c a nhãnấ ộ ệ ạ ủ

B ng 2.1 Các ph ng th c c a JLabelả ươ ứ ủ

Ch ng trình 2.1 ch ra cách s d ng c a Label:ươ ỉ ử ụ ủ

Ch ng trình 2.1ươ

import javax.swing.*;class Labeltest{

JLabel label=new JLabel(“This is just a label”);public static void main(String args[]){

JFrame f=new JFrame(“Label”);f.add(label);f.setSize(300,200);f.setVisible(true);

}}

label=new JLabel(“This is just a label”); T o đ i t ng JLabelạ ố ượadd(label); Label s hi n th ch khi nó đ c thêm vào container. đây, JFrame làẽ ể ị ỉ ượ Ở container mà thành ph n JLabel đ c thêm vào. Vi c này đ c th c hi n b ng cách sầ ượ ệ ượ ự ệ ằ ử d ng ph ng th c add().ụ ươ ứ

K t xu t c a ch ng trình đ c ch ra hình sauế ấ ủ ươ ượ ỉ ở

Page 7: Bao Cao Java Swing 3754

JTextComponentĐây là l p cha c a t t c các l p hi n th văn b n trong Swingớ ủ ấ ả ớ ể ị ả

JTextField+ Cho phép so n th o ch 1 dòng văn b nạ ả ỉ ả+ Các hàm kh i t oở ạ

JTextField(); t o JTextField m iạ ớJTextField(int cols); t o JTextField m i v i s c t cho tr cạ ớ ớ ố ộ ướJTextField(String text); t o JTextField m i v i n i dung cho tr cạ ớ ớ ộ ướJtextField(String text, int col);

Các ph ng th c th ng đ c s d ng c a đ i t ng TextField đ c tóm t t trong b ngươ ứ ườ ượ ử ụ ủ ố ượ ượ ắ ả sau:

Ph ng th cươ ứ Ch c năngứsetEchoChar(char) Đ t các kí t đ c hi n ra thay thặ ự ượ ệ ế

ký t nh p vào.ự ậsetText(String s) Gán n i dung cho TextField.ộgetText() L y n i dung c a TextField.ấ ộ ủsetEditable(boolean) Xác đ nh TextField có so n th oị ạ ả

đ c hay không. Nó ch đ c so nượ ỉ ượ ạ th o khi giá tr tham s truy n vàoả ị ố ề là True.

isEditable() Xác đ nh xem tr ng có đang trongị ườ mode so n th o hay không. Giá trạ ả ị

Page 8: Bao Cao Java Swing 3754

tr v ki u Boolean.ả ề ể

Ch ng trình sau ch ra cách s d ng c a TextField:ươ ỉ ử ụ ủ

import javax.swing.*;class JFrameDemo {

public static void main(String[] args) {

JTextField tf = new JTextField("This is great...",20); JPanel p = new JPanel(); JFrame f = new JFrame(); p.add(tf); f.add(p); f.setSize(300,200); f.setVisible(true);}

}Trong ch ng trình này, chúng ta s d ng ph ng th c setLayout() đ thay đ i cách trìnhươ ử ụ ươ ứ ể ổ bày c a các thành ph n trên v t ch a. Layout manager có ch c năng x p x p các thànhủ ầ ậ ứ ứ ắ ế ph n trong m t v t ch a.ầ ộ ậ ứ

K t xu t c a ch ng trình đ c ch ra hình bên d i:ế ấ ủ ươ ượ ỉ ở ướ

JTextArea+ Cho phép nh p nhi u dòng văn b nậ ề ả+ Có h tr thanh cu nỗ ợ ộ+ Hàm kh i t o:ở ạ

JTextArea(); t o m i m t JTextAreaạ ớ ộJTextArea(int rows, int cols); t o m i m t JTextArea v i s c t và s dòngạ ớ ộ ớ ố ộ ố

cho tr cướJTextArea(String text); t o m i m t JTextArea v i n i dung cho tr cạ ớ ộ ớ ộ ướJTextArea(String text, int rows, int cols);

Các ph ng th c th ng đ c s d ng nhi u nh t c a JTextArea:ươ ứ ườ ượ ử ụ ề ấ ủ

Page 9: Bao Cao Java Swing 3754

Ph ng th cươ ứ Ch c năng ứsetText(String) Gán n i dung cho JTextArea.ộgetText() Tr v n i dung c a JTextArea.ả ề ộ ủsetEdiable(boolean) Xác đ nh xem JTextAreacó th đ c so nị ể ượ ạ

th o hay không. JTextArea có th đ c so nả ể ượ ạ th o khi giá tr này là True.ả ị

isEdiable() Xác đ nh xem JTextArea có đang trong chị ế đ so n th o đ c không. Tr v giá tr làộ ạ ả ượ ả ề ị ki u Boolean.ể

insertText(String, int) Chèn chu i đ c vào v trí đ c cho tr c.ỗ ượ ị ượ ướreplaceText(String, int, int) Thay th văn b n n m gi a v trí int, int choế ả ằ ữ ị

tr c.ướ

Ch ng trình sau ch ra cách s d ng c a JTextArea:ươ ỉ ử ụ ủ

import javax.swing.*;class TextAreatest{

public static void main(String args[]){

JLabel lb=new JLabel(“Details”);JTextArea ta=new JTextArea();JFrame f=new JFrame(“TextArea”);JPanel p=new JPanel();p.add(lb);p.add(ta);f.add(p);f.setSize(300,200);f.setVisible(true);

}}K t xu t c a ch ng trình đ c ch ra hình bên d i:ế ấ ủ ươ ượ ỉ ở ướ

JPasswordField

Page 10: Bao Cao Java Swing 3754

import javax.swing.*; import java.awt.*; class DemoFrm extends JFrame {

public DemoFrm() {super("Demo Frame");JPanel p = new JPanel();JLabel l = new JLabel("Password");

JPasswordField pf = new JPasswordField(12);pf.setEchoChar('*');

p.add(l);p.add(pf);pack();setVisible(true);

}public static void main(String[] args) {

new DemoFrm();}

}

JButton+ Th hi n ch c năng nút b mể ệ ứ ấ+ JButton là l p con c a l p AbstractButtonớ ủ ớ+ Đ i t ng JButton bao g m chu i văn b n, hình nh và các đ ng vi nố ượ ồ ỗ ả ả ườ ề+ Kh i t o:ở ạ

JButton();JButton(Icon icon);JButton(String text);JButton(String text, Icon icon);JButton(Action a);

Ví d đ n gi n sau đây s t o ra 3 button:ụ ơ ả ẽ ạ

import javax.swing.*;class Buttontest{

public static void main(String args[]){

JButton b1 = new JButton(“red”);

Page 11: Bao Cao Java Swing 3754

JButton b2 = new JButton(“Green”);JButton b3 = new JButton(“Blue”);JFrame f= new JFrame(“Button”);JPanel p= new JPanel();p.add(b1);p.add(b2);p.add(b3);f.add(p);f.setSize(300,200);f.setVisible(true);

}}

K t xu t c a ch ng trình đ c ch ra hình d i đâyế ấ ủ ươ ượ ỉ ở ướ

JCheckBox+ Cung c p cho ng i dùng kh năng l a ch nấ ườ ả ự ọ+ Các hàm kh i t o:ở ạ

JCheckBox();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);JCheckBox(Action a);

Ch ng trình sau minh h a cách s d ng các checkboxươ ọ ử ụ

import javax.swing.*;import java.awt.*;class JCheckboxtest{

Page 12: Bao Cao Java Swing 3754

public static void main(String args[]){

JLabel l=new JLabel("CheckBoxes");JCheckBox b1=new JCheckBox("red",true);JCheckBox b2=new JCheckBox("Green",false);JCheckBox b3=new JCheckBox("Blue",false);JFrame f=new JFrame("Checkbox and radiobutton");JPanel p=new JPanel();p.setLayout(new GridLayout(4,1));p.add(l);p.add(b1);p.add(b2);p.add(b3);f.add(p);f.setSize(300,200);f.setVisible(true);

}}K t xu t đ c ch ra hình d iế ấ ượ ỉ ở ướ

JRadioButton+ 1 t p các nút cho phép l a ch n ch 1 nút t i 1 th i đi mậ ự ọ ỉ ạ ờ ể+ Dùng l p ButtonGroup đ t o nhómớ ể ạ+ Các hàm kh i t o:ở ạ

JRadioButton();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);JRadioButton(Action a);

Ch ng trình sau minh h a cách s d ng các radiobutton:ươ ọ ử ụ

import javax.swing.*;

Page 13: Bao Cao Java Swing 3754

import java.awt.*;class JRadioBoxtest{public static void main(String args[]){

JLabel l=new JLabel("JRadioButton");JRadioButton b1=new JRadioButton("red",true);JRadioButton b2=new JRadioButton("Green",false);JRadioButton b3=new JRadioButton("Blue",false);

JFrame f=new JFrame("JCheckbox");JPanel p = new JPanel();

ButtonGroup bg = new ButtonGroup();bg.add(b1);bg.add(b2);bg.add(b3);

p.setLayout(new GridLayout(4,1));p.add(l);p.add(b1); p.add(b2); p.add(b3);

f.add(p);f.setSize(300,200);f.setVisible();

}}Đ u tiên chúng ta t o m t đ i t ng JFrame, đ i t ng này ho t đ ng nh m t containerầ ạ ộ ố ượ ố ượ ạ ộ ư ộ s ch a thành ph n checkbox mà ta đã t o. Sau đó ta t o 6 checkbox, 02 checkbox đ cẽ ứ ầ ạ ạ ượ đánh d u ch n. Đ làm đ c đi u này, ta đ a giá tr true nh m t tham s cho hàmấ ọ ể ượ ề ư ị ư ộ ố contructor Checkbox, ngoài ra còn có m t tham s String là nhãn c a checkbox. Đ hi n thộ ố ủ ể ể ị các đi u khi n này theo d ng l i, ta ph i thi t l p cách trình bày v d ng GridLayout có 8ề ể ạ ướ ả ế ậ ề ạ dòng và 1 c t. Cu i cùng, ta t o m t bi u hi n cho l p Checkboxtest và thi t l p kích th cộ ố ạ ộ ể ệ ớ ế ậ ướ cho JFrame. Đ hi n th nó, ta cho g i ph ng th c setVisible()ể ể ị ọ ươ ứ

K t xu t đ c ch ra hình bên d i:ế ấ ượ ỉ ở ướ

Page 14: Bao Cao Java Swing 3754

JList+ Khi các thông tin dùng đ l a ch n nhi u, chúng ta có th dùng 1 danh sách đ choể ự ọ ề ể ể phép vi c ch n l aệ ọ ự+ Component JList cho phép s p x p d li u hi n th , có th phân nhómắ ế ữ ệ ể ị ể+ JList có th hi n th chu i và iconể ể ị ỗ+ JList không h tr double click chu tỗ ợ ộ+ Kh i t o:ở ạ

JList();JList(ListModel dataModel);JList(Object []listData);

Ch ng trình sau minh h a cách s d ng JListươ ọ ử ụ

import javax.swing.*;import java.awt.*;class JListtest extends JFrame {

public JListtest() {super("JListtest");Container c = getContentPane();c.setLayout(new FlowLayout());JLabel l = new JLabel("Colors");String []listData = {"white","black","blue","green"};JList list = new JList(listData);c.add(l);c.add(list);pack();setVisible(true);

}public static void main(String args[]){

new JListtest();}

}

K t xu t nh hình d iế ấ ư ướ

JComboBox+ Là s k t h p gi a TextField và Listboxự ế ợ ữ+ C u trúc g n gi ng nh JListấ ầ ố ư

Page 15: Bao Cao Java Swing 3754

+ Kh i t o:ở ạJComboBox();JComboBox(ComboBoxModel asModel);JcomboBox(Object []item);

Cách s d ng JComboBox t ng t JListử ụ ươ ự

K t xu tế ấ

B TRÍ CÁC THÀNH PHÂN BÊN TRONG CÁC Đ I T NG CH AỐ Ố ƯỢ ỨLayout manager đi u khi n cách trình bày v t lý c a các ph n t GUI nh là button,ề ể ậ ủ ầ ử ư

textbox, option button v.v… M t layout manager t đ ng b trí các thành ph n nàyộ ự ộ ố ầ trong container.

Các ki u trình bày khác nhau:ể

Flow layout Border layout Card layout Grid layout GridBag Layout

T t c các thành ph n mà chúng ta v a t o s d ng layout manager m c đ nh. Choấ ả ầ ừ ạ ử ụ ặ ị ví d , FlowLayout là cách trình bày m c đ nh c a m t applet. Layout manager này sụ ặ ị ủ ộ ẽ t đ ng x p x p các thành ph n. T t c các thành ph n đ c đ t trong m tự ộ ắ ế ầ ấ ả ầ ượ ặ ộ container, và đ c x p x p nh layout manager t ng ng. Layout manager đ cượ ắ ế ờ ươ ứ ượ thi t l p b ng ph ng th c setLayout()ế ậ ằ ươ ứ

Bây gi chúng ta s tìm hi u chi ti t các cách trình bày và cách b trí các thành ph nờ ẽ ể ế ố ầ c a ta vào nh ng v trí mong mu n.ủ ữ ị ố

FlowLayout

FlowLayout là layout manager m c đ nh cho Applet và Panel. Các thành ph n đ c x p x pặ ị ầ ượ ắ ế t góc trái trên đ n góc ph i d i c a màn hình. Khi m t s thành ph n đ c t o, chúngừ ế ả ướ ủ ộ ố ầ ượ ạ đ c x p x p theo hàng, t trái sang ph i. ượ ắ ế ừ ả

L p FlowLayout có 3 c u trúc:ớ ấpublic FlowLayout();public FlowLayout(int alignment);

Page 16: Bao Cao Java Swing 3754

public FlowLayout(int alignment, int horizontalGap, int verticalGap);aglignment có các giá tr FlowLayout.LEFT, FlowLayout.CENTER, FlowLayout.RIGHT.ịThông s horizontalGap và verticalGap xác đ nh s Pixel đ t gi a các thành ph n.ố ị ố ặ ữ ầ

Ch ng trình sau minh h a v FlowLayout manager. ươ ọ ề

import javax.swing.*;import java.awt.FlowLayout;class Fltest extends JFrame{

JButton b1=new JButton(“Center Aligned Button 1”);JButton b2=new JButton(“Center Aligned Button 2”);JButton b3=new JButton(“Center Aligned Button 3”);

public Fltest(String title){

super(title);setLayout(new FlowLayout(FlowLayout.CENTER));add(b1);add(b2);add(b3);setSize(300,200);setVisible(true);

}

public static void main(String args[]){

new Fltest(“Flow Layout”);}

}

K t xu t c a ch ng trình ch ra hình sau:ế ấ ủ ươ ỉ ở

BorderLayoutBorderLayout là layout manager m c đ nh cho Window, Frame và Dialog. Layout này x pặ ị ắ

x p t i đa 5 thành ph n trong m t container.ế ố ầ ộ

Page 17: Bao Cao Java Swing 3754

NORTH – Đ t đ nh c a container.ặ ở ỉ ủ EAST – Đ t phía bên ph i c a container.ặ ả ủ SOUTH – Đ t phía d i c a container.ặ ở ướ ủ WEST – Đ t phía bên trái c a container.ặ ủ CENTER – Đ t gi a c a container.ặ ở ữ ủ

Đ thêm m t thành ph n vào vùng North, b n s d ng cú pháp sau:ể ộ ầ ạ ử ụ

Button b1=new Button(“North Button”); // khai báo thành ph nầsetLayout(new BorderLayout()); // thi t l p layoutế ậadd(b1,BorderLayout.NORTH); // thêm thành ph n vào layoutầ

Các thành ph n v n gi nguyên v trí t ng đ i c a chúng k c khi container b thay đ iầ ẫ ữ ị ươ ố ủ ể ả ị ổ kích th c. Các thành ph n đ c đ t trong vùng North, South đ c dàn n m ngang trongướ ầ ượ ặ ượ ằ khi đó các thành ph n đ t trong vùng East và West l i đ c dàn th ng đ ng. Các thànhầ ặ ạ ượ ẳ ứ ph n đ c đ t trong vùng Center s đ c dàn đ u vào nh ng khu v c n m gi a c aầ ượ ặ ẽ ượ ề ữ ự ằ ữ ủ container.

add(b2,BorderLayout.CENTER); // thêm thành ph n vào vùng Centerầ

Khi t t c các thành ph n đ c đ t vào các vùng t ng ng, lúc đó JFrame s gi ng nhấ ả ầ ượ ặ ươ ứ ẽ ố ư sau:

BorderLayout có th ch a nhi u h n 5 thành ph n. Đ th c hi n đi u này, chúng ta có thể ứ ề ơ ầ ể ự ệ ề ể s d ng các Panel v i các layout khác nhau đ ch a các thành ph n, và sau đó đ t cácử ụ ớ ể ứ ầ ặ panel này vào trong BorderLayout.

CardLayout Manager

CardLayout có th l u tr m t ngăn x p (stack) các giao di n. M i giao di n gi ng nh m tể ư ữ ộ ế ệ ỗ ệ ố ư ộ b ng (card). B ng th ng là đ i t ng Panel. M t thành ph n đ c l p nh button s đi uả ả ườ ố ượ ộ ầ ộ ậ ư ẽ ề khi n cách trình bày các b ng l p trên cùng.ể ả ở ớ

Đ u tiên, chúng ta b trí t p h p các thành ph n đ c yêu c u trên các panel t ng ng.ầ ố ậ ợ ầ ượ ầ ươ ứ M i panel s đ c b trí vào các layout khác nhau. Ví d :ỗ ẽ ượ ố ụ

Page 18: Bao Cao Java Swing 3754

panelTwo.setLayout(new GridLayout(2,1));

Panel chính s ch a nh ng panel này. Chúng ta thi t l p layout c a panel chính làẽ ứ ữ ế ậ ủ Cardlayout nh sau:ư

CardLayout card=new CardLayout();

panelMain.setLayout(card);

B c k ti p là thêm các panel khác vào panel chính:ướ ế ế

panelMain.add(“Red Panel”, panelOne);

panelMain.add(“Blue Panel”, panelTwo);

Ph ng th c add() s d ng hai tham s . Tham s đ u tiên là m t String làm nhãn c aươ ứ ử ụ ố ố ầ ộ ủ panel và tham s th hai là tên đ i t ng Panel. ố ứ ố ượ

Ch ng trình minh h a CardLayout:ươ ọ

import javax.swing.*;import java.awt.*;import java.awt.event.*;class CardLayoutDemo extends JFrame implements ActionListener{

JButton backbutton,nextbutton;JLabel lbl1,lbl2,lbl3,lbl4;JTextField other1;JPanel p1,p2,first,second,third,fourth;CardLayout c1;public CardLayoutDemo(){

backbutton=new JButton("Back");nextbutton=new JButton("Next");backbutton.addActionListener(this);nextbutton.addActionListener(this);

p2 = new JPanel();p2.setLayout(new FlowLayout());p2.add(backbutton);p2.add(nextbutton);

c1=new CardLayout();p1=new JPanel();p1.setLayout(c1);// Set panel layout to CardLayout

Page 19: Bao Cao Java Swing 3754

lbl1=new JLabel("First");lbl2=new JLabel("Second");lbl3=new JLabel("Third");lbl4=new JLabel("Fourth");

//First panelfirst=new JPanel();first.add(lbl1);

//Second panelsecond=new JPanel();second.add(lbl2);

//Third panelthird=new JPanel();third.add(lbl3);

//Fourth panelfourth=new JPanel();fourth.add(lbl4);

//Add panels to the card deck panelp1.add("1",first);p1.add("2",second);p1.add("3",third);p1.add("4",fourth);

setLayout(new GridLayout(2,1));add(p2);add(p1);pack();setVisible(true);

}public void actionPerformed(ActionEvent a) {

Object obj = a.getSource(); if (obj == backbutton){ c1.previous(p1); } if (obj == nextbutton){

c1.next(p1); }

}public static void main(String[] args) {

new CardLayoutDemo();}

Page 20: Bao Cao Java Swing 3754

}K t xu t c a ch ng trình nh sau:ế ấ ủ ươ ư

Trong hình bên trên, các panel đ c thêm vào panel chính nh là các th riêng bi t. Vì thượ ư ẻ ệ ế ch có th đ u tiên m i đ c th y trên màn hình. Nh ng ng i dùng có th đi u h ngỉ ẻ ầ ớ ượ ấ ư ườ ể ề ướ sang các panel khác s d ng các ph ng th c c a CardLayout.ử ụ ươ ứ ủ

GridLayout Manager

GridLayout tr giúp vi c chia container vào trong ô l i. Các thành ph n đ c đ t trong cácợ ệ ướ ầ ượ ặ ô giao c a dòng và c t. M i l i nên ch a ít nh t m t thành ph n. M t l i đ c s d ngủ ộ ỗ ướ ứ ấ ộ ầ ộ ướ ượ ử ụ khi t t c các thành ph n có cùng kích th c.ấ ả ầ ướ

GridLayout đ c t o nh sau:ượ ạ ư

Gridlayout g1=new GridLayout(4,3);

4 là s dòng và 3 là s c t.ố ố ộ

Ch ng trình sau minh h a cách trình bày l i:ươ ọ ướ

import javax.swing.*;import java.awt.*;class Gltest extends JFrame{

JButton btn[];String str[]={“1”, “2”, “3”, “4”, “5”, “6”, “7”, “8”, “9”};public Gltest(String title){

super(title);setLayout(new GridLayout(3,3));btn=new JButton[str.length];for (int i=0; i<str.length;i++){

btn[i]=new JButton(str[i]);add(btn[i]);

}}public static void main(String args[]){

Gltest t=new Gltest(“Grid Layout”);

Page 21: Bao Cao Java Swing 3754

t.setSize(300,200);t.setVisible(true);

}}

K t xu t ch ng trình nh sau:ế ấ ươ ư

GridBagLayout Manager

GridBagLayout là cách trình bày hi u qu và ph c t p h n b t c cách trình bày nào khác.ệ ả ứ ạ ơ ấ ứ Layout này đ t các thành ph n vào v trí chính xác. V i layout này, các thành ph n khôngặ ầ ị ớ ầ c n có cùng kích th c. Nó t ng t nh GridLayout manager, khi các thành ph n đ cầ ướ ươ ự ư ầ ượ x p x p trong l i theo dòng và c t. Tuy nhiên, th t đ t các thành ph n không theoắ ế ướ ộ ứ ự ặ ầ nguyên t c t trái sang ph i và t trên xu ng d i.ắ ừ ả ừ ố ướ

GridBagLayout gb=new GridBagLayout()ContainerName.setLayout(gb);

Đ s d ng layout này, b n c n cung c p thông tin v kích th c và v trí c a m i thànhể ử ụ ạ ầ ấ ề ướ ị ủ ỗ ph n. L p GridBagLayoutConstraints ch a t t c các thông tin mà l p GridLayout c n đ bầ ớ ứ ấ ả ớ ầ ể ố trí và đ nh kích th c m i thành ph n. B ng sau li t kê danh sách các bi n thành viên c aị ướ ỗ ầ ả ệ ế ủ l p GridBagConstraintsớ

Các bi n thành viênế M c đíchụweightx, weighty Ch ra s phân ph i c a kho ng tr ng trongỉ ự ố ủ ả ố

GridBagLayout. Giá tr m c đ nh cho các bi n nàyị ặ ị ế là 0.

gridwidth, gridheight Ch ra s l ng các ô (cell) chi u ngang và chi uỉ ố ượ ề ề d c trong vùng hi n th c a m t thành ph n.ọ ể ị ủ ộ ầ

ipadx, ipady Ch ra l ng làm thay đ i chi u cao và chi u r ngỉ ượ ổ ề ề ộ t i thi u c a thành ph n. Nó s thêm 2*ipadx vàoố ể ủ ầ ẽ chi u r ng t i thi u và 2*ipady vào chi u cao t iề ộ ố ể ề ố thi u c a thành ph n. Giá tr ể ủ ầ ịm c đ nh cho c hai là 0.ặ ị ả

Page 22: Bao Cao Java Swing 3754

anchor Ch ra cách x p x p các thành ph n trong cell. M cỉ ắ ế ầ ặ đ nh s đ t vào gi a cell. Các thành viên d li uị ẽ ặ ữ ữ ệ tĩnh (static) sau đây có th đ c s d ng:ể ượ ử ụ GridBagConstraints.NORTH GridBagConstraints.EAST GridBagConstraints.WEST GridBagConstraints.SOUTH GridBagConstraints.NORTHEAST GridBagConstraints.SOUTHEAST

gridx, gridy Ch ra v trí cell s đ t thành ph n. Khi thi t l p giáỉ ị ẽ ặ ầ ế ậ tr c a gridx là ‘GridbagConstraints.RELATIVE’ thìị ủ thành ph n đ c thêm s n m v trí bên ph i c aầ ượ ẽ ằ ở ị ả ủ thành ph n cu i cùng.ầ ố

fill Ch ra cách mà m t thành ph n đ c b trí vào cellỉ ộ ầ ượ ố th nào n u nh cell l n h n thành ph n. M c đ nhế ế ư ớ ơ ầ ặ ị là kích th c thành ph n không thay đ i.ướ ầ ổ

B ng Các bi n thành viên c a l p GridBagConstraintsả ế ủ ớ

B ng sau đây cung c p m t danh sách các bi n d li u tĩnh là các giá tr cho bi n fill:ả ấ ộ ế ữ ệ ị ế

Giá trị Mô tảGridBagConstraints.NONE M c đ nh, không làm thay đ i kíchặ ị ổ

th c c a thành ph n.ướ ủ ầGridBagConstraints.HORIZONTAL Tăng chi u r ng c a thành ph n theoề ộ ủ ầ

chi u ngang (HORIZONTAL) đ làmề ể cho thành ph n kh p v i chi u ngang. ầ ớ ớ ề

GridBagConstraints.VERTICAL Tăng chi u cao c a thành ph n theoề ủ ầ chi u đ ng (VERTICAL) đ làm choề ứ ể thành ph n kh p v i chi u d c. ầ ớ ớ ề ọ

GridBagConstraints.BOTH Tăng chi u r ng, chi u cao c a thànhề ộ ề ủ ph n theo c chi u ngang và chi uầ ả ề ề d c.ọ

insets Xác đ nh kho ng cách top, buttom, leftị ả và right gi a các thành ph n. M c đ nhữ ầ ặ ị là 0.

B ng Các bi n thành viên d li u tĩnh c a bi n fillả ế ữ ệ ủ ế

S d ng ph ng th c setConstraints() đ thi t l p các h ng s cho m i thành ph n. Cho víử ụ ươ ứ ể ế ậ ằ ố ỗ ầ d :ụ

gblay.setConstraints(lb1, gbc);

gblay là đ i t ng c a l p GridBagLayout, lbl là thành ph n Label và gbc là đ i t ng c aố ượ ủ ớ ầ ố ượ ủ l p GridBagConstraints.ớ

Page 23: Bao Cao Java Swing 3754

Ch ng trình sau minh h a m t ví d c a GridBagLayout và GridBagConstraints.ươ ọ ộ ụ ủ

import javax.swing.*;import java.awt.*;class Gbltest extends JFrame{

JTextArea ta;JTextField tf;JButton b1,b2;CheckboxGroup cbg;Checkbox cb1,cb2,cb3,cb4;GridBagLayout gb;GridBagConstraints gbc;public Gbltest(String title){

super(title);gb=new GridBagLayout();setLayout(gb);gbc=new GridBagConstraints();ta=new JTextArea(“Textarea”,5,10);tf=new JTextField(“enter your name”);b1=new JButton(“TextArea”); b2=new JButton(“TextField”);

cbg=new CheckboxGroup();cb1=new Checkbox(“Bold”, cbg,false);cb2=new Checkbox(“Italic”, cbg,false);cb3=new Checkbox(“Plain”, cbg,false);cb4=new Checkbox(“Bold/Italic”, cbg,true);

gbc.fill=GridBagConstraints.BOTH;addComponent(ta,0,0,4,1);

gbc.fill=GridBagConstraints.HORIZONTAL;addComponent(b1,0,1,1,1);

gbc.fill=GridBagConstraints.HORIZONTAL;addComponent(b2,0,2,1,1);

gbc.fill=GridBagConstraints.HORIZONTAL;addComponent(cb1,2,1,1,1);

gbc.fill=GridBagConstraints.HORIZONTAL;addComponent(cb2,2,2,1,1);

Page 24: Bao Cao Java Swing 3754

gbc.fill=GridBagConstraints.HORIZONTAL;addComponent(cb3,3,1,1,1);

gbc.fill=GridBagConstraints.HORIZONTAL;addComponent(cb4,3,2,1,1);

gbc.fill=GridBagConstraints.HORIZONTAL;addComponent(tf,4,0,1,3);

}

public void addComponent(Component c, int row, int col, int nrow, int ncol){

gbc.gridx=col;gbc.gridy=row;

gbc.gridwidth=ncol;gbc.gridheight=ncol;

gb.setConstraints(c,gbc);add(c);

}public static void main(String args[]){

Gbltest t=new Gbltest(“GridBag Layout”);t.setSize(300,200);t.setVisible(true);

}}

Khi m t container b thay đ i kích th c và khi kho ng tr ng ph t n t i, các thành ph n cóộ ị ổ ướ ả ắ ụ ồ ạ ầ chi u r ng l n h n s chi m gi nhi u kho ng tr ng h n là các thành ph n có giá tr về ộ ớ ơ ẽ ế ữ ề ả ố ơ ầ ị ề chi u r ng nh h n.ề ộ ỏ ơ

K t xu t c a ch ng trình đ c ch ra hìnhế ấ ủ ươ ượ ỉ ở

Page 25: Bao Cao Java Swing 3754

Gi i thích đo n mã trên:ả ạ

gbc.fill=GridBagConstraints.BOTH;

Thành viên fill c a l p GridBagConstraints ch ra thành ph n có th đ c m r ng theoủ ớ ỉ ầ ể ượ ở ộ h ng n m ngang và th ng đ ng. Cú pháp sau mô t thành ph n ch đ c m r ng theoướ ằ ẳ ứ ả ầ ỉ ượ ở ộ h ng n m ngang:ướ ằ

gbc.fill=GridBagConstraints.HORIZNTAL;

Cú pháp sau s thêm vào thành ph n TextArea v i s dòng và s c t c n chi m:ẽ ầ ớ ố ố ộ ầ ế

addComponent(ta,0,0,4,1);

0 – Kh i đ u t dòng th 0ở ầ ừ ứ0 – Kh i đ u t c t th 0ở ầ ừ ộ ứ4 – ta chi m gi 4 dòngế ữ1 – ta chi m 1 c tế ộ

S d ng cú pháp sau đ b trí các thành ph n vào trong dòng và c t nào đó:ử ụ ể ố ầ ộ

gbc.gridx=col;gbc.gridy=row;

đây gridx, gridy là c t và dòng n i mà thành ph n có th đ c đ t vào.Ở ộ ơ ầ ể ượ ặ

S d ng cú pháp sau đ ch ra s l ng các c t và dòng mà các thành ph n có th chi mử ụ ể ỉ ố ượ ộ ầ ể ế gi :ữ

gbc.gridwitdh=ncol;gbc.gridheight=nrow;

đây, gridwidth xác đ nh s l ng các c t mà m t thành ph n chi m gi và gridheight xácỞ ị ố ượ ộ ộ ầ ế ữ đ nh s l ng các dòng mà m t thành ph n chi m gi .ị ố ượ ộ ầ ế ữ

Khi m t container b thay đ i kích th c và khi kho ng tr ng ph t n t i, các thành ph n cóộ ị ổ ướ ả ắ ụ ồ ạ ầ chi u r ng l n h n s chi m gi nhi u kho ng tr ng h n là các thành ph n có giá tr về ộ ớ ơ ẽ ế ữ ề ả ố ơ ầ ị ề chi u r ng nh h n.ề ộ ỏ ơ

Làm vi c không có LayoutManager (Absolute Positioning)ệ+B n có th đ t các v trí cho các component mà không c n đung layout manager.ạ ể ặ ị ầ Gi i pháp này dùng đ xác đ nh hoàn toàn kích th c và v trí c a componentả ể ị ướ ị ủ+ M c dù có th làm vi c mà không c n Layout Manager, b n nên dùng Layoutặ ể ệ ầ ạ manager n u có th đ thay đ i kích th c c a Container và đi u ch nh hình d ngế ể ể ổ ướ ủ ề ỉ ạ c a các thành ph n ph thu c vao Platform. ủ ầ ụ ộ

Ví d :ụ

Page 26: Bao Cao Java Swing 3754

import javax.swing.*;import java.awt.*;class AbsoluteLayoutDemo {

public static void addComponentsToPane(Container pane) { pane.setLayout(null);

JButton b1 = new JButton("one");JButton b2 = new JButton("two");JButton b3 = new JButton("three");

pane.add(b1);pane.add(b2);pane.add(b3);

Insets insets = pane.getInsets();Dimension size = b1.getPreferredSize();b1.setBounds(25 + insets.left, 5 + insets.top, size.width, size.height);size = b2.getPreferredSize();b2.setBounds(55 + insets.left, 40+insets.top, size.width, size.height);size = b3.getPreferredSize();b3.setBounds(150 + insets.left, 15+insets.top, size.width+50, size.height);

}private static void creatAndShowGUI() {

JFrame frame = new JFrame("Absolute Layout Demo");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

addComponentsToPane(frame.getContentPane());

Insets insets = frame.getInsets();frame.setSize(300+insets.left + insets.right, 125 + insets.top + insets.bottom);frame.setVisible(true);

}public static void main(String[] args) {

creatAndShowGUI();}

}

K t xu t c a ch ng trìnhế ấ ủ ươ

Tài li t tham kh oệ ả

Page 27: Bao Cao Java Swing 3754

http://www.ddth.com/archive/index.php/t-165058.html?s=6184bef66e714cbbf8107e8fd13b688ahttp://news.congdongjava.com/index.php/java-se-desktop/36-tong-quan-ly-thuyet-ve-swing.htmlhttp://www.dit.hcmut.edu.vn/~ptvu/ip/Swing_GUI.pdfTài li u l p trình h ng đ i t ng h t xaệ ậ ướ ố ượ ệ ừTài li u core javaệ