You are on page 1of 27

BI TP NHM

NHM 3 LP TRNH GIAO DIN VI SWING

V Duy Khnh ng Thanh H Nguyn nh Thnh Nguyn Duy Hng

I. Tng quan v swing 1.Gii thiu v Swing Swing l th vin lp trnh m rng ca java. N m rng cc i t ng giao di n h a c bn ca java. Swing cn c gi l th vin JEC (Java Foundations Class). Khi mu n s dng cc i tng ha ca th vin ny, ta phi khai bo ch th : Import javax.swing.*; 2. Ti sao li s dng Swing? Swing l gi con c k tha v pht trin t gi giao di n awt 1 gi giao di n i u. Swing s dng nhng th vit t vit c lp vi h thng do tnh n nh cao, lo i b c nhc im ca awt l ph thuc vo h thng dn n nhng kt qu khc nhau nhng h iu hnh khc nhau . 3. Cc gi v cc lp Swing 3.1. javax.accessibility Cha cc lp v cc giao tip m c th c s dng cho php cng ngh tr gip tng tc vi cc thnh phn ca Swing. Cc cng ngh tr gip c p 1 dy cc item, t b c vn bn n phng i mn hnh. Mc d cc lp accessibility l nh ng cng ngh khng thuc cc thnh phn Swing nhng chng c s d ng m r ng thng qua cc thnh phn Swing. 3.2. javax.swing

Cha cc thnh phn ct li ca Sswing, bao gm hu ht cc m hnh giao ti p v cc l p h tr 3.3. javax.swing.border Cha nh ngha cc lp ng vin tru tng cng nh 8 ng vi n c nh ngha. Border khng phi l nhng thnh phn, thay v th, chng l nh ng y u t h a c bi t m Swing s dng nh nhng thuc tnh v t chng xung quanh cc thnh ph n. N u nh bn to ra border ca ring bn, bn c th to l p con t nh ng border c s n trong gi ny, hoc bn c th vit m cho mt lp mi 3.4. javax.swing.colorchooser H tr cho thnh phn JcolorChooser 3.5. java.swing.event nh ngha nhng listener mi v nhng event m nh ng thnh ph n Swing s d ng giao tieeos thng tin vi cc class 3.6. javax.swing.filechooser H tr cho thnh phn JfileChooser 3.7. javax.swing.plaf nh ngha nhng yu t dng nht to nn cm quan (Look And Feel) cho m i thnh ph n Swing. Trong gi ny cha cc gi con l javax.swing.plaf.basic, javax.swing.plaf.metal v javax.swing.plaf.multi 3.8. javax.swing.table Cung cp cc m hnh v quan st cho thnh phn table, cho php b n s p x p thng ring bit trong nh dng li vi s xut hin tng t nh bng tnh 3.9. javax.swing.text Cung cp cc im ca cc lp v giao tip da trn vn b n h tr thi t k thng d ng c bit n nh document/view 3.10. javax.swing.test.html S dng k thut c v nh dng vn bn HTML 3.11. javax.swing.text.html.parser H tr vic phn tch HTML 3.12. javax.swing.text.hf S dng k thut c v nh dng Rich Text Formay 3.13. javax.swing.tree nh ngha cc m hnh v quan st thnh phn m t cy phn c p, c th thay th m t c u trc file hoc mt d cc thuc tnh 3.14. javax.swing.undo Cha nhng chc nng cn thit cho vic b sung chc nng undo II. Cc thnh phn trong swing NI DUNG + Giao din ngi dng vi Java (Java GUI)

+ Cc Container : JFrame, JPanel, Jdialog + Cc component: Jlabel, Jtextfield, Jbutton, JComboBox, JcheckBox, JradioButton + Layout manager: FlowLayout, GridLayout, BorderLayout, + To menu 1. GIAO DIN NGI DNG VI JAVA + Cung cp cc cng c cho php to giao ti p tr c quan v h p d n v i ng i dng, c bit n l swing + Giao din vi ngi dng bao gm 1 ca s chnh v cc control c t ln trn + Cc thnh phn to giao din nm trong gi javax.swing + Tn ca cc lp ny bt u bng ch J

Hnh 1.1 1.1 JFrame + y l ca s chnh dng cha cc thnh phn giao di n khc. ng vai tr l 1 container + JFrame thng dng to ra ca s trong chng trnh swing + Khi to JFrame(); To mt frame nhng khng hin th (invisible) JFrame(String title); To mt frame khng hin th, c tiu . + Cc thnh phn ha c a vo content pane, khng a tr c ti p vo i tng JFrame + V d: Chng trnh sau minh ho cch to mt 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);

} } Kt xut ca chng trnh ging nh hnh di

JPanel + JPanel l container trung gian dng ch a cc conponent khc + Thng dng phn chia cc component trong ng d ng + Layout mc nh l FlowLayout + Khi to: JPanel(); To JPanel mi khng tiu JPanel(LayoutManager layout); To JPanel mi c ki u Layout l layout Chng trnh sau ch ra cch to mt 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 khng th c nhn thy trc tip. Do , chng ta c n thm panel n m t frame. V vy ta cn to mt JFrame mi v thm JPanel mi c t o ny vo . Kt xut ca chng trnh:

JDialog Lp JDialog tng t nh lp JFrame, ngha l JDialog l l p con c a l p Window. i tng dialog c to 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 rng dialog s ngn chn bt k tng tc no xy n v i cc ca s c m khc, trong khi dialog ang c hin th trn mn hnh. Ki u h p thoi ny ngn chn ngi dng tng tc vi cc c a s khc (c a cng ng d ng) trn mn hnh, cho ti khi dialog c ng l i. 2. CC THNH PHN GIAO TIP NGI DNG C BN + Form c dng thu thp thng tin t pha ng i dng + Trong khi giao tip, component c dng cho php nhp liu l TextField ho c TextBox + khi to cc phn t, cc bc cn phi thc hin l: To phn t Thit lp cc thuc tnh (size, color, font, ) a n vo mn hnh Cc loi component

Hnh 2.1 JLabel + c dng hin th vn bn (text) v hnh nh (image) + To hiu ng trc quan cho mn hnh giao di n + Cc hm khi to: JLabel(); To JLabel trng JLabel(String st); To JLabel vi ni dung l st JLabel(Icon img); To JLabel ni dung l hnh nh img JLabel(int align); To mt JLabel vi mt ch canh l (alignment) , canh l c th l JLabel.LEFT, JLabel.RIGHT hay JLabel.CENTER. Cc phng thc c s dng ph bin ca label c trnh by b ng bn d i: Phng thc Chc nng setFont(Font f) Thay i phng ch ca JLabel setText(String s) Thit lp nhn cho Jlabel getText() Ly ni dung hin ti ca nhn Bng 2.1 Cc phng thc ca JLabel Chng trnh 2.1 ch ra cch s dng ca Label: Chng trnh 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); To i tng JLabel add(label); Label s hin th ch khi n c thm vo container. y, JFrame l container m thnh phn JLabel c thm vo. Vic ny c th c hi n b ng cch s dng phng thc add(). Kt xut ca chng trnh c ch ra hnh sau

JTextComponent y l lp cha ca tt c cc lp hin th vn bn trong Swing

JTextField + Cho php son tho ch 1 dng vn bn + Cc hm khi to JTextField(); to JTextField mi JTextField(int cols); to JTextField mi vi s ct cho trc JTextField(String text); to JTextField mi vi ni dung cho trc JtextField(String text, int col); Cc phng thc thng c s dng ca i tng TextField c tm tt trong bng sau: Phng thc setEchoChar(char) setText(String s) getText() setEditable(boolean) Chc nng t cc k t c hin ra thay th k t nhp vo. Gn ni dung cho TextField. Ly ni dung ca TextField. Xc nh TextField c son tho c hay khng. N ch c son tho khi gi tr tham s truyn vo l True. Xc nh xem trng c ang trong mode son tho hay khng. Gi tr

isEditable()

tr v kiu Boolean. Chng trnh sau ch ra cch s dng ca 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 chng trnh ny, chng ta s dng phng th c setLayout() thay i cch trnh by ca cc thnh phn trn vt cha. Layout manager c ch c nng x p x p cc thnh phn trong mt vt cha. Kt xut ca chng trnh c ch ra hnh bn di:

JTextArea + Cho php nhp nhiu dng vn bn + C h tr thanh cun + Hm khi to: JTextArea(); to mi mt JTextArea JTextArea(int rows, int cols); to mi mt JTextArea vi s ct v s dng cho trc JTextArea(String text); to mi mt JTextArea vi ni dung cho trc JTextArea(String text, int rows, int cols); Cc phng thc thng c s dng nhiu nht ca JTextArea:

Phng thc setText(String) getText() setEdiable(boolean) isEdiable() insertText(String, int) replaceText(String, int, int)

Chc nng Gn ni dung cho JTextArea. Tr v ni dung ca JTextArea. Xc nh xem JTextAreac th c son tho hay khng. JTextArea c th c son tho khi gi tr ny l True. Xc nh xem JTextArea c ang trong ch son tho c khng. Tr v gi tr l kiu Boolean. Chn chui c vo v tr c cho trc. Thay th vn bn nm gia v tr int, int cho trc.

Chng trnh sau ch ra cch s dng ca 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); } } Kt xut ca chng trnh c ch ra hnh bn di:

JPasswordField

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 hin chc nng nt bm + JButton l lp con ca lp AbstractButton + i tng JButton bao gm chui vn bn, hnh nh v cc ng vin + Khi to: JButton(); JButton(Icon icon); JButton(String text); JButton(String text, Icon icon); JButton(Action a); V d n gin sau y s to ra 3 button: import javax.swing.*; class Buttontest { public static void main(String args[]) { JButton b1 = new JButton(red);

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); } } Kt xut ca chng trnh c ch ra hnh di y

JCheckBox + Cung cp cho ngi dng kh nng la chn + Cc hm khi to: 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); Chng trnh sau minh ha cch s dng cc checkbox import javax.swing.*; import java.awt.*; class JCheckboxtest {

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); } } Kt xut c ch ra hnh di

JRadioButton + 1 tp cc nt cho php la chn ch 1 nt ti 1 thi i m + Dng lp ButtonGroup to nhm + Cc hm khi to: 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); Chng trnh sau minh ha cch s dng cc radiobutton: import javax.swing.*;

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 tin chng ta to mt i tng JFrame, i tng ny ho t ng nh m t container s cha thnh phn checkbox m ta to. Sau ta t o 6 checkbox, 02 checkbox c nh du chn. lm c iu ny, ta a gi tr true nh m t tham s cho hm contructor Checkbox, ngoi ra cn c mt tham s String l nhn c a checkbox. hi n th cc iu khin ny theo dng li, ta phi thit lp cch trnh by v d ng GridLayout c 8 dng v 1 ct. Cui cng, ta to mt biu hin cho l p Checkboxtest v thi t l p kch th c cho JFrame. hin th n, ta cho gi phng thc setVisible() Kt xut c ch ra hnh bn di:

JList + Khi cc thng tin dng la chn nhiu, chng ta c th dng 1 danh sch cho php vic chn la + Component JList cho php sp xp d liu hin th, c th phn nhm + JList c th hin th chui v icon + JList khng h tr double click chut + Khi to: JList(); JList(ListModel dataModel); JList(Object []listData); Chng trnh sau minh ha cch s dng 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(); } } Kt xut nh hnh di

JComboBox + L s kt hp gia TextField v Listbox + Cu trc gn ging nh JList

+ Khi to: JComboBox(); JComboBox(ComboBoxModel asModel); JcomboBox(Object []item); Cch s dng JComboBox tng t JList Kt xut

B TR CC THNH PHN BN TRONG CC I TNG CHA Layout manager iu khin cch trnh by vt l c a cc ph n t GUI nh l button, textbox, option button v.v Mt layout manager t ng b tr cc thnh ph n ny trong container. Cc kiu trnh by khc nhau: Flow layout Border layout Card layout Grid layout GridBag Layout

Tt c cc thnh phn m chng ta va to s d ng layout manager m c nh. Cho v d, FlowLayout l cch trnh by mc nh c a m t applet. Layout manager ny s t ng xp xp cc thnh phn. Tt c cc thnh phn c t trong m t container, v c xp xp nh layout manager t ng ng. Layout manager c thit lp bng phng thc setLayout() By gi chng ta s tm hiu chi tit cc cch trnh by v cch b tr cc thnh ph n ca ta vo nhng v tr mong mun. FlowLayout FlowLayout l layout manager mc nh cho Applet v Panel. Cc thnh ph n c x p x p t gc tri trn n gc phi di ca mn hnh. Khi m t s thnh ph n c t o, chng c xp xp theo hng, t tri sang phi. Lp FlowLayout c 3 cu trc: public FlowLayout(); public FlowLayout(int alignment);

public FlowLayout(int alignment, int horizontalGap, int verticalGap); aglignment c cc gi tr FlowLayout.LEFT, FlowLayout.CENTER, FlowLayout.RIGHT. Thng s horizontalGap v verticalGap xc nh s Pixel t gi a cc thnh ph n. Chng trnh sau minh ha 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); } } Kt xut ca chng trnh ch ra hnh sau:

BorderLayout BorderLayout l layout manager mc nh cho Window, Frame v Dialog. Layout ny x p xp ti a 5 thnh phn trong mt container.

NORTH t nh ca container. EAST t pha bn phi ca container. SOUTH t pha di ca container. WEST t pha bn tri ca container. CENTER t gia ca container.

thm mt thnh phn vo vng North, bn s dng c php sau: Button b1=new Button(North Button); // khai bo thnh ph n setLayout(new BorderLayout()); // thit lp layout add(b1,BorderLayout.NORTH); // thm thnh phn vo layout Cc thnh phn vn gi nguyn v tr tng i ca chng k c khi container b thay i kch thc. Cc thnh phn c t trong vng North, South c dn n m ngang trong khi cc thnh phn t trong vng East v West l i c dn th ng ng. Cc thnh phn c t trong vng Center s c dn u vo nh ng khu v c n m gi a c a container. add(b2,BorderLayout.CENTER); // thm thnh ph n vo vng Center Khi tt c cc thnh phn c t vo cc vng tng ng, lc JFrame s gi ng nh sau:

BorderLayout c th cha nhiu hn 5 thnh phn. th c hi n i u ny, chng ta c th s dng cc Panel vi cc layout khc nhau ch a cc thnh ph n, v sau t cc panel ny vo trong BorderLayout. CardLayout Manager CardLayout c th lu tr mt ngn xp (stack) cc giao di n. M i giao di n gi ng nh m t bng (card). Bng thng l i tng Panel. Mt thnh phn c l p nh button s i u khin cch trnh by cc bng lp trn cng. u tin, chng ta b tr tp hp cc thnh phn c yu cu trn cc panel t ng ng. Mi panel s c b tr vo cc layout khc nhau. V d:

panelTwo.setLayout(new GridLayout(2,1)); Panel chnh s cha nhng panel ny. Chng ta thi t l p layout c a panel chnh l Cardlayout nh sau: CardLayout card=new CardLayout(); panelMain.setLayout(card); Bc k tip l thm cc panel khc vo panel chnh: panelMain.add(Red Panel, panelOne); panelMain.add(Blue Panel, panelTwo); Phng thc add() s dng hai tham s. Tham s u tin l m t String lm nhn c a panel v tham s th hai l tn i tng Panel. Chng trnh minh ha 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

lbl1=new JLabel("First"); lbl2=new JLabel("Second"); lbl3=new JLabel("Third"); lbl4=new JLabel("Fourth"); //First panel first=new JPanel(); first.add(lbl1); //Second panel second=new JPanel(); second.add(lbl2); //Third panel third=new JPanel(); third.add(lbl3); //Fourth panel fourth=new JPanel(); fourth.add(lbl4); //Add panels to the card deck panel p1.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(); }

} Kt xut ca chng trnh nh sau:

Trong hnh bn trn, cc panel c thm vo panel chnh nh l cc th ring bi t. V th ch c th u tin mi c thy trn mn hnh. Nhng ng i dng c th i u h ng sang cc panel khc s dng cc phng thc ca CardLayout. GridLayout Manager GridLayout tr gip vic chia container vo trong l i. Cc thnh ph n c t trong cc giao ca dng v ct. Mi li nn ch a t nht m t thnh ph n. M t l i c s d ng khi tt c cc thnh phn c cng kch thc. GridLayout c to nh sau: Gridlayout g1=new GridLayout(4,3); 4 l s dng v 3 l s ct. Chng trnh sau minh ha cch trnh by li: 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);

t.setSize(300,200); t.setVisible(true); } } Kt xut chng trnh nh sau:

GridBagLayout Manager GridBagLayout l cch trnh by hiu qu v ph c t p h n b t c cch trnh by no khc. Layout ny t cc thnh phn vo v tr chnh xc. V i layout ny, cc thnh ph n khng cn c cng kch thc. N tng t nh GridLayout manager, khi cc thnh ph n c xp xp trong li theo dng v ct. Tuy nhin, th t t cc thnh ph n khng theo nguyn tc t tri sang phi v t trn xung di. GridBagLayout gb=new GridBagLayout() ContainerName.setLayout(gb); s dng layout ny, bn cn cung cp thng tin v kch th c v v tr c a m i thnh phn. Lp GridBagLayoutConstraints cha tt c cc thng tin m l p GridLayout c n b tr v nh kch thc mi thnh phn. Bng sau li t k danh sch cc bi n thnh vin c a lp GridBagConstraints Cc bin thnh vin weightx, weighty gridwidth, gridheight ipadx, ipady Mc ch Ch ra s phn phi ca khong trng trong GridBagLayout. Gi tr mc nh cho cc bi n ny l 0. Ch ra s lng cc (cell) chiu ngang v chiu dc trong vng hin th ca mt thnh phn. Ch ra lng lm thay i chiu cao v chiu rng ti thiu ca thnh phn. N s thm 2*ipadx vo chiu rng ti thiu v 2*ipady vo chiu cao t i thiu ca thnh phn. Gi tr mc nh cho c hai l 0.

anchor

gridx, gridy

fill

Ch ra cch xp xp cc thnh phn trong cell. Mc nh s t vo gia cell. Cc thnh vin d li u tnh (static) sau y c th c s dng: GridBagConstraints.NORTH GridBagConstraints.EAST GridBagConstraints.WEST GridBagConstraints.SOUTH GridBagConstraints.NORTHEAST GridBagConstraints.SOUTHEAST Ch ra v tr cell s t thnh phn. Khi thit lp gi tr ca gridx l GridbagConstraints.RELATIVE th thnh phn c thm s nm v tr bn phi ca thnh phn cui cng. Ch ra cch m mt thnh phn c b tr vo cell th no nu nh cell ln hn thnh phn. Mc nh l kch thc thnh phn khng thay i. Bng Cc bin thnh vin ca lp GridBagConstraints

Bng sau y cung cp mt danh sch cc bin d li u tnh l cc gi tr cho bi n fill: Gi tr GridBagConstraints.NONE GridBagConstraints.HORIZONTAL GridBagConstraints.VERTICAL GridBagConstraints.BOTH insets M t Mc nh, khng lm thay i kch thc ca thnh phn. Tng chiu rng ca thnh phn theo chiu ngang (HORIZONTAL) lm cho thnh phn khp vi chiu ngang. Tng chiu cao ca thnh phn theo chiu ng (VERTICAL) lm cho thnh phn khp vi chiu dc. Tng chiu rng, chiu cao ca thnh phn theo c chiu ngang v chiu dc. Xc nh khong cch top, buttom, left v right gia cc thnh phn. Mc nh l 0.

Bng Cc bin thnh vin d liu tnh ca bin fill S dng phng thc setConstraints() thit lp cc hng s cho m i thnh ph n. Cho v d: gblay.setConstraints(lb1, gbc); gblay l i tng ca lp GridBagLayout, lbl l thnh ph n Label v gbc l i t ng c a lp GridBagConstraints.

Chng trnh sau minh ha mt v d ca 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);

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 mt container b thay i kch thc v khi khong trng ph t n t i, cc thnh ph n c chiu rng ln hn s chim gi nhiu khong trng h n l cc thnh ph n c gi tr v chiu rng nh hn. Kt xut ca chng trnh c ch ra hnh

Gii thch on m trn: gbc.fill=GridBagConstraints.BOTH; Thnh vin fill ca lp GridBagConstraints ch ra thnh ph n c th c m r ng theo hng nm ngang v thng ng. C php sau m t thnh phn ch c m r ng theo hng nm ngang: gbc.fill=GridBagConstraints.HORIZNTAL; C php sau s thm vo thnh phn TextArea vi s dng v s c t c n chi m: addComponent(ta,0,0,4,1); 0 Khi u t dng th 0 0 Khi u t ct th 0 4 ta chim gi 4 dng 1 ta chim 1 ct S dng c php sau b tr cc thnh phn vo trong dng v c t no : gbc.gridx=col; gbc.gridy=row; y gridx, gridy l ct v dng ni m thnh ph n c th c t vo. S dng c php sau ch ra s lng cc ct v dng m cc thnh ph n c th chi m gi: gbc.gridwitdh=ncol; gbc.gridheight=nrow; y, gridwidth xc nh s lng cc ct m mt thnh phn chi m gi v gridheight xc nh s lng cc dng m mt thnh phn chim gi. Khi mt container b thay i kch thc v khi khong trng ph t n t i, cc thnh ph n c chiu rng ln hn s chim gi nhiu khong trng h n l cc thnh ph n c gi tr v chiu rng nh hn. Lm vic khng c LayoutManager (Absolute Positioning) +Bn c th t cc v tr cho cc component m khng cn ung layout manager. Gii php ny dng xc nh hon ton kch th c v v tr c a component + Mc d c th lm vic m khng cn Layout Manager, b n nn dng Layout manager nu c th thay i kch thc ca Container v iu ch nh hnh d ng ca cc thnh phn ph thuc vao Platform. V d:

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(); } } Kt xut ca chng trnh

Ti lit tham kho

http://www.ddth.com/archive/index.php/t-165058.html?s=6184bef66e714cbbf8107e8fd13b688a http://news.congdongjava.com/index.php/java-se-desktop/36-tong-quan-ly-thuyet-ve-swing.html http://www.dit.hcmut.edu.vn/~ptvu/ip/Swing_GUI.pdf Ti liu lp trnh hng i tng h t xa Ti liu core java

You might also like