Top Banner

of 65

Creating GUI With JFC Swing -Minhhaivnnvn.minhhaifithou,

May 30, 2018

Download

Documents

minhhaivnvnn
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
  • 8/9/2019 Creating GUI With JFC Swing -Minhhaivnnvn.minhhaifithou,

    1/65

    Gio trnh Java

    35559403.doc 1

    Ph n VI: To ra mt GUI vi JFC/Swing

    TM T TT rong ph n ny s h ng d n b n cch t o ra nh ng giao di n ng i dng ho(GUIs) v i JFC/Swing cho nh ng ng d ng v applets thng qua vi c s d ngnh ng thnh ph n Swing . Nh ng thnh ph n Swing, m t b ph n c a JavaTM Foundation Classes (JFC), c th c s d ng ho c v i JDK TM 1.1 ho c JavaTM 2 platform.Ghi ch: ph n ny k hng h ngd n b n cch s d ng nh ng thnh ph n AWT

    1. Nh p mn v i S wing Trong phn ny s l-t qua nhanh v nhm mc ch l cho bn hnhdung v JFC v Swing. Sau s l cch bin dch v chy ch-ngtrnh - cho c ng dng v cc applets thng qua vic s dng cc thnhphn Swing bng mt ch-ng trnh n gin.2. Cc khi ni m v ch c n ng c a Swing

    Cung c p cc thng tin c n thi t s d ng cc thnh ph n Swing m t cch chi u qu . V d nh cch m t ch ng trnh Swing hi n th giao di n ho ngdng, cch qu n l cc s ki n nh kch chu t v cu i cng s l vi c s d ng cckhi ni m v ch c n ng nh th no trong m t ch ng trnh th c s .

    3. S d ng cc thnh ph n Swing

    H ng d n cch s d ng m i thnh ph n Swing button, table, cc thnh ph ntext(nhn chung cc thnh ph n Swing cung t ng t nh cc thnh ph n AWT .T uy nhin, chng c m t s tnh n ng m i. V d nh button, label c th n p hnh

    nh,...)

    4. S d ng cc ch c n ng khc c a Swing.

    Ni thm v cc thnh ph n khc c a Swing nh actions, borders, icons, v timers. Ngoi ra s cn h ng d n b n cch t o m t ch ng trnh a tuy n(multithreaded)

    5. Cc thnh ph n Laying Out l i t ng ch a .

    H ng d n cch ch n m t (layout manager), cch s d ng c a m i l p layoutmanager m Java cung c p.

    6. Cch vi t m t s ki n Listener

    H ng d n cch n m b t cc s ki n trong ch ng trnh

    7. Lm vi c v i h a

    S d ng cc ng v , cc text ch t o ra m t hnh nh, k c cc hnh nng.

    8. Chuy n i thnh Swing

  • 8/9/2019 Creating GUI With JFC Swing -Minhhaivnnvn.minhhaifithou,

    2/65

    Gio trnh Java

    35559403.doc 2

    H ng d n cch chuy n i m t ch ng trnh s d ng AWT API 1.1 sang ch ngtrnh s d ng cc thnh ph n Swing.

    Bi 1: B t uv iSwing

    1. i i u v JFC v Swing

    JFC (Java Foundation Classes) l m t t p h p cc ch c n ng gip ng i dng xyd ng giao di n ho (GUIs). JFC c cng b l n u tin vo n m 1997 tronh i ngh v nh ng nh pht tri n JavaOne, bao g m nh ng ch c n ng sau:

    1. Cc thnh ph n Swing

    2. H tr Pluggable Look and Feel

    3. T ruy c p API

    4. Java 2D API (Java 2 Platform only)

    5. H tr Drag and Drop (Java 2 Platform only)3 ch c n ng u c a JFC c th c hi n m khng c n b ng m qu c gia m d a vcc hm API c trong JDK 1.1

    Nh ng p hin b n c Swing APISwing API c s d ng trong 2 d ng sau:

    (1) L ph n c t li c a Java 2 Platform (phin b n chu n c a v 1.2 v v 1.3)(2) JFC 1.1 (s d ng v i JDK 1.1)

    V i m i phin b n s d ng, ty thu c vo vi c chng ta c n n JDK 1.1 hay l Java

    2 Platform v khng c n ph i thm b t k th vi n no m v n c th s d ng Swing API.T uy nhin, n u c n s d ng JDK 1.1 th thm vo Swing API (s d ngJFC 1.1)Hng Sun pht hnh nhi u phin b n c a JFC 1.1 v nh n bi t n l phin b nno th c n d a vo phin b n c a Swing API ch a trong n .B ng sau y li t k cc thng tin v Swing API.

    Swing APIVersion

    T ng ng v i phin b n JFC 1.1

    T ng ng v i phin b n Java 2 Platf orm(Standard Edition)

    Ch th ch

    Swing 1.0.3 JFC 1.1(with Swing 1.0.3)

    Khng Phin b n c a JFC 1.1 bao g mJava Plug-inTM 1.1.1.

    Swing 1.1 JFC 1.1(with Swing 1.1) v 1.2, v 1.2.1

    Phin b n u tin c y Swing 1.1 APIh tr s d ng cc s n ph m th ng m i.Java Plug-in 1.1.2 v Java Plug-in 1.2 cung c p applet h tr cho t ng JDK 1.1 +Swing 1.1 v Java 2 Platform v 1.2 t ng

    ng.

    Swing 1.1.1 JFC 1.1 v 1.2.2 T hm vo cc tnh n ng m r ng, x lnhi u l i k thu t, cc ch c n ng m i (API

  • 8/9/2019 Creating GUI With JFC Swing -Minhhaivnnvn.minhhaifithou,

    3/65

    Gio trnh Java

    35559403.doc 3

    (with Swing 1.1.1)

    khng c n thay i) cho Swing 1.1.JavaPlug-in 1.1.3 v Java Plug-in 1.2.2 cungc p applet h tr choJDK 1.1 + Swing 1.1.1v Java 2 Platform v 1.2.2, t ng ng.

    Khng c s khc bi t v "Swing" version

    Khng c v 1.3 Beta

    T hm vo cc tnh n ng, x l nhi u l i kthu t, cc ch c n ng m i. B sung thm cctnh n ng v cc hm API m i. Java Plug-in1.3 Beta cung c p applet h tr cho phi b n ny.

    Cc gi SwingSwing API v a l n m nh, l i v a m m d o.T rong phin b n 1.1 c a API c 15 gidng chung: javax.accessibility, javax.swing, javax.swing.border , javax.swing.colorchooser , javax.swing.event, javax.swing.filechooser , javax.swing.plaf , javax.swing.plaf.basic, javax.swing.plaf.metal, javax.swing.plaf.multi, javax.swing.table, javax.swing.text, javax.swing.text.html, javax.swing.tree, and javax.swing.undo.T rong h u h t cc ch ng trnh ch s d ng m t ph n nh c a API, ch y u l cc gSwing javax.swing, javax.swing.event. S khc bit gi a cc t hn h ph n Swing v AWT

    Cc thnh ph n AWT c cung c p trong JDK 1.0 v 1.1.M c d Java 2 Platformv n cn h tr cc thnh ph n AWT , tuy nhin, chng tann dng cc thnh ph nSwing. Khi s d ng, c th phn bi t cc thnh ph n Swing v i cc thnh ph n AWT .Cc thnh ph n Swing c tn b t u b ng k t J . V d nh , l p AWT button classc tn l Bu ttonth l p Swing button c tn l Jbu tton.Ngoi ra, cc thnh ph n AWT th n m trong gi java.awt,cn cc thnh ph n Swing th n m trong gi javax.swing.Do , khi s d ng cc thnh ph n Swing th trong ph n khai bo c a ch ng trnh, tanh thm vo dng l nh sau:

    import javax.swing.*;S khc bi t l n nh t gi a cc thnh ph n AWT v Swing y l cc thnh ph nSwing c th c thi m hon ton khng c n m ngu n (with absolutely no nativecode). K t khi cc thnh ph n Swing khng cn b h n ch trong nh ng khun m uthng th ng, (the least common denominator), t c l lc m cc tnh n ng c a n c m t h u h t trong cc phin b n, th cc ch c n ng c a n m r ng h n nhi u sv i cc ch c n ng c a cc thnh ph n AWT . Do cc thnh ph n Swing khng c mngu n (native code), nn chng c th c thm vo nh l m t add-on c a JDK 1.1hay nh m t ph n c a Java 2 Platform.

    Ngay c nh ng thnh ph n Swing n gi n nh t c ng c nh ng kh n ng v t xcc thnh ph n AWT :

    y Swing buttons v labels c th hi n th hnh nh v c v n b n .

    y C th d dng thay i ng vi n c a h u h t cc thnh ph n Swing.T a cth d dng thay i ng vi n c a m t label hay m t i t ng ch a no

    .

  • 8/9/2019 Creating GUI With JFC Swing -Minhhaivnnvn.minhhaifithou,

    4/65

    Gio trnh Java

    35559403.doc 4

    y C th d dng thay i hnh vi hay giao di n c a m t thnh ph n Swing trong ph ng th c i u khi n c a n ho c t o ra m t l p con (subclass) c a chnhthnh ph n .

    y T hnh ph n Swing khng c hnh ch nh t . Do , cc nt l nh c th c hnhtrn ho c bo gc.

    y K thu t h tr (Assistive technologies) qua vi c c mn hnh c th d dngl y thng tin t cc thnh ph n Swing .

    2 . Bin d ch v th c t hi m t ch ng trn h Swing

    vi t m t ch ng trnh s d ng cc thnh ph n Swing, tr c tin, ta ph i c phin b n c a JDK v JFC t ng ng. Bin d ch v th c thi m t ch ng trnh Swing cn tythu c vo vi c ang s d ng JDK 1.1 hay Java 2 Platform. N u s d ng Java 2Platform th s n gi n h n v Swing c tch h p.

    2.1 Bin d ch v th c thi ch ng trnh v iJava 2 Platform, v 1.2 or 1.3

    T rong ph n ny, chng ta s kh o st cc v n qua v dSwingApplication. java cgiao di n nh sau:

    Sau y l cc b c trnh t cho vi c bin d ch v th c thi m t ch ng trnh Swingv i Java 2 SDK, v 1.2 hay v 1.3:

    1. N u ch a c, ci t vo my phin b n Java 2 Platform.2. T o m t ch ng trnh s d ng cc thnh ph n Swing.

    3. Bin d ch ch ng trnh.

    4. Cho th c thi ch ng trnh.

    Hi n nay, ang c 2 phin b n c a Java 2 Platform, t t c u mi n ph do Sun cungc p (b n c th vo a ch ny c h tr : http://www.sun.com). Phin b n tnh t l v 1.2 (Java 2 SDK, Standard Edition v 1.2) v phin b n th hai l v 1.3 (Java2 SDK, Standard Edition v 1.3).

    t o m t ch ng trnh s d ng cc thnh ph n Swing, c th s d ng ch ng trnhm u m chng ti cung c p sau y SwingApplication.java. C n l u l tn file ph ichnh xc l: "SwingApplication.java"import javax.swing.*; //This is the final package name.//import com.sun. java.swing.*; //Used by JDK 1.2 Beta 4 and all//Swing releases before Swing 1.1 Beta 3.import java.awt.*;import java.awt.event.*;

  • 8/9/2019 Creating GUI With JFC Swing -Minhhaivnnvn.minhhaifithou,

    5/65

    Gio trnh Java

    35559403.doc 5

    public class SwingApplication {private static String labelPrefix = "Number of button clicks: ";private int numClicks = 0;

    public Component createComponents() {final JLabel label = new JLabel(labelPrefix + "0 ");

    JButton button = new JButton("I'm a Swing button!");button.setMnemonic(KeyEvent.VK_I);button.addActionListener(new ActionListener() {

    public void actionPerformed(ActionEvent e) {numClicks++;label.setText(labelPrefix + numClicks);

    }});label.setLabelFor(button);

    /** An easy way to put space between a top-level container * and its contents is to put the contents in a JPanel* that has an "empty" border.*/

    JPanel pane = new JPanel();pane.setBorder(BorderFactory.createEmptyBorder(

    30, //top30, //left10, //bottom30) //right);

    pane.setLayout(new GridLayout(0, 1));pane.add(button);pane.add(label);

    return pane;}

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

    UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());

    } catch (Exception e) { }

    //Create the top-level container and add contents to it.JFrame frame = new JFrame("SwingApplication");SwingApplication app = new SwingApplication();Component contents = app.createComponents();frame.getContentPane().add(contents, BorderLayout.CENTER);

    //Finish setting up the frame, and show it.

  • 8/9/2019 Creating GUI With JFC Swing -Minhhaivnnvn.minhhaifithou,

    6/65

    Gio trnh Java

    35559403.doc 6

    frame.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {

    System.exit(0);}

    });frame.pack();frame.setVisible(true);

    }}B c ti p theo l bin d ch. Vi c bin d ch tr nn n gi n v d dng v i Java SDKs khi cc gi Swing c tch h p trong phin b n Standard Edition c a Java 2Platform. Cu l nh nh sau:

    javac -deprecation SwingApplication. java T r ng h p khi bin d ch khng thnh cng , c th l do b n ang s d ng trnh bind ch JDK 1.1 thay v v 1.2 ho c v 1.3 ho c ang s d ng b n beta c a Java 2Platform.

    T h c thi ch ng trnh s c th c hi n khi bin d ch thnh cng . C n m b otrong class path ch ng d n n file th c thi:Vd: java -classpath .;C:\ java\lnfdir\newlnf. jar SwingApplicationL u : khng c n ph i g ph n ui m r ng .cls. trnh thng d ch c a phin b n 1hay 1.3 s t ng d tm.

    2.2 Bin d ch v th c thi ch ng trnh v i JDK 1.1

    C ng t ng t nh v i Java 2 Platform, nh ng trnh bin d ch s d ng y l JDK1.1 v JFC 1.1.

    3. Th c t hi cc Swing Applets vi t m t Swing Applets, tr c tin l ph i th c thi c chng. Ph n ny s gi

    thi u 2 applets.

    Sau y l ph n m c a applets HelloSwingApplet.javaimport javax.swing.*; //This is the final package name.//import com.sun. java.swing.*; //Used by JDK 1.2 Beta 4 and all

    //Swing releases before Swing 1.1 Beta 3.import java.awt.*;

    public class HelloSwingApplet extends JApplet {

    // This is a hack to avoid an ugly error messag e in 1.1.public HelloSwingApplet() {

    getRootPane().putClientProperty("defeatSystemEventQueueCheck",Boolean.TRUE);

    }

    public void init() {

  • 8/9/2019 Creating GUI With JFC Swing -Minhhaivnnvn.minhhaifithou,

    7/65

    Gio trnh Java

    35559403.doc 7

    JLabel label = new JLabel("You are successfully running a Swing applet!");

    label.setHorizontalAlignment(JLabel.CENTER);

    //Add border. Should use createLineBorder, but then the bottom//and left lines don't appear -- seems to be an off-by-one error.label.setBorder(BorderFactory.createMatteBorder(1,1,2,2,Color.black));

    getContentPane().add(label, BorderLayout.CENTER);}

    } th c thi m t Swing Applets, theo trnh t cc b c sau:

    (1) m b o l c trnh duy t 1.1 ho c 1.2 ho c t i v Java Plug-in v chngl nh ng phin b n m i nh t.T r ng h p khng c cc th trn, c th sd ng Applet Viewer (appletviewer ).

    (2) N u b n ang s d ng trnh duy t 1.1 khng c Java Plug-in th c n ph i

    n p file Swing JAR vo trnh duy t.(3) Ki m tra l i xem trnh duy t c a b n hon ch nh ch a.T rong ph m vi

    bi ny th hnh d i y ki m ch ng cho trnh duy t c a b n l p nghon hay hay ch a. N u trong trnh duy t c a b n xu t hi n applet nh d i

    y th OK.T r ng h p ch th y m t thay v hai applet ho c khng th ycc hnh nh th trnh duy t c a b n ch a th c s s n sng.

    4 . Tr ao i thm v m t ng d ng Swing

    T rong ph n ny, chng ta s tm hi u thm thng qua ch ng trnhSwingApplication. SwingApplications hi n th c a s nh sau:

    Ph n m c aSwingApplication. java th c hi n nh ng cng vi c sau:

    4.1 Import ing Swing packages

    Dng l nh sau s import gi Swing chnh:import javax.swing.*;

  • 8/9/2019 Creating GUI With JFC Swing -Minhhaivnnvn.minhhaifithou,

    8/65

    Gio trnh Java

    35559403.doc 8

    L u : JFC 1.1 v Java 2 SDK v 1.2 phin b n beta s d ng tn g ikhc nhau cho gi Swing.

    H u h t cc ch ng trnh u c n import hai gi chnh c a AWT l: import java.awt.*;import java.awt.event.*;

    4.2 Choosing the look and feelSwing cho php b n ch nh r look and feel m ch ng trnh c a b n sd ng -- Java look and feel, Windows look and feel, CDE/M otif look and feel,... o n m in m d i y s ch ra cho b n cch mSwingApplicationch

    nh look and feel:public static void main(String[] args) {

    try {UIManager.setL ookAndFeel(

    UIManager.getCr ossPl atf ormLoo kAndFeelClass Name()); } catch (Exception e) { }

    ...//Create and show the GUI... }

    4.3 Xc l p i t ng ch a m c nh

    M i ch ng trnh c trnh di n u c giao di n v i m c n gi n nh t lm t i t ng ch a thu c thnh ph n c a Swing m c nh. h u h t c

    ng d ng, i t ng ch a Swing m c nh c th lJFrame , JDialog, ho c(cho applets)JApplet. M i i t ngJFrame s th c hi n m t c a s chnh

    v m iJDialog s th c thi cho c a s th hai.M

    i i t ngJApplet th chi n vi c hi n th c a m t applet bn trong m t c a s . Cc i t ng chm c nh c a Swing cung c p cc h tr c n thi t cc thnh ph n Swingth c hi n vi c v v qu n l cc hnh vi.

    V d SwingApplication ch c i t ng ch a m c nh l JFrame. Khing i s d ng ng frame thi ng d ng s thot. o n m sau y xcl p v cho hi n th frame:

    public class SwingApplication {...public static void main(String[] args) {

    ...JFrame frame = new JFrame("SwingApplication"); //...create the components to go into the frame... //...stick them in a container named contents... frame.getContentPane().add(contents,

    BorderLayout.CENTER);

    //Finish setting up the frame, and show it.frame.addWindowListener(...);frame.pack();

  • 8/9/2019 Creating GUI With JFC Swing -Minhhaivnnvn.minhhaifithou,

    9/65

    Gio trnh Java

    35559403.doc 9

    frame.setVisible(true);}

    }4.4 Xc l p buttons v labels

    Gi ng nh GUIs, giao di n c aSwingApplicationch a m t button v m tlabel. o n m sau y kh i t o button :

    (1) JButton button = new JButton("I'm a Swing button!");(2) button.setMnemonic(KeyEvent.VK_I);(3) button.addActionListener(...create an action listener... );

    Dng l nh (1) t o m t nt l nh v i tiu "I'm a Swing button!". Dng (2)xc l p key I ng vai tr t ng t nh s ki n ng i dng kch vo ntl nh(t c l khi ng i dng nh n Alt-i th cng t ng t nh kch chu t vo ntl nh). Dng (3) ng k vi c n m b t s ki n cho vi c kch nt l nh

    o n m sau y kh i t o v v n hnh ho t ng c a label:..//where instance variables are declared:

    private static String labelPrefix = "Number of button clicks: ";private int numClicks = 0;...//in GUI initialization code: final JLabel label = new JLabel(labelPrefix + "0 ");...label.setLabelFor(button);...//in the event handler for button clicks: label.setText(labelPrefix + numClicks);

    o n m trn n gi n, ngo i tr dng kh i ng ph ng th c setLabelFor(). N xu t hi n y gi ng nh s g i v k thu t h tr tr c ti p (assistivtechnologies) m thng qua , m t label c m t nh l m t button.

    4.5 T hm thnh ph n vo cc i t ng ch a.

    SwingApplication nhm label v button vo trong m t i t ng ch a(JPanel ) tr c khi thm vo frame m t thnh ph n khc. o n m sau ykh i t o m t panel:

    (1) JPanel pane = new JPanel();(2) pane.setBorder(BorderFactory.createEmptyBorder(30, 30, 10,30));(3) pane.setLayout(new GridLayout(0, 1));(4) pane.add(button);(5) pane.add(label);

    Dng (1) dng t o m t panel, khai bo m t i t ng c ki u Jpanel v i tng i l pane.

    Dng (2) t o ng vi n bao b c cho panel .

    Dng (3) dng t o m t i t ng qu n l layout gim st t t c cc thnh ph n c trong panel s c hi n th trn m t c t .

  • 8/9/2019 Creating GUI With JFC Swing -Minhhaivnnvn.minhhaifithou,

    10/65

    Gio trnh Java

    35559403.doc 10

    Dng (4) v (5) dng a button v label vo trong panel. Vi c thm buttonv label vo trong panel c ngh a l chng s c i u khi n b i layout qu nl panel .

    4.6 T hm ng vi n (borders) xung quanh m t thnh ph n.

    o n m sau y s t o m t ng vi n cho m t panel:

    pane.setBorder(BorderFactory.createEmptyBorder(30, //top30, //left10, //bottom30) //right);

    ng vi n ny n gi n ch cung c p m t vng tr ng c a panel.T hm 30 pixels cho top, left, v right, v 10 pixels cho bottom. Borders l tnh n ng mJPanel th a k t l p JComponent .

    4.7 Handling events

    SwingApplicationch a 2 event handlers.M t n m b t s ki n kch vo ntl nh(action events). Ci kia n m b t s ki n ng c a s (window events).Sau y l o n m qu n l cc s ki n c aSwingApplication:

    button.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {

    numClicks++;label.setText(labelPrefix + numClicks);

    }});...

    frame.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0);

    }});

    4.8 Dealing with thread issues

    Ch ng trnhSwingApplicationl m t ti n trnh an ton. B i v, m t khi giaodi n c a n ang c hi n th (visible), th thao tc trn giao di n c a n chx y ra cho m t event handler. Khng th c hai ti n trnh cng truy xu t nm t GUI trong cung fm t th i i m.

    4.9 Supporting assistive technologies

    H tr assistive technologies, m t thi t b gi ng nh c mn hnh, cung ccch th c x l thng tin trn GUI. H tr ny c trong h u h t cc thnh ph n Swing.T rongSwingApplicationc m t ch c p n k thu t ny:

    label.setLabelFor(button); Nh ni, vi c l y thng tin t cc thnh ph n Swing l i u ang c quantm, k thu t trn gip cho cng vi c ny c th c hi n m t cch d dng:

  • 8/9/2019 Creating GUI With JFC Swing -Minhhaivnnvn.minhhaifithou,

    11/65

    Gio trnh Java

    35559403.doc 11

    JButton button = new JButton("I'm a Swing button!");label = new JLabel(labelPrefix + "0 ");label.setText(labelPrefix + numClicks);JFrame frame = new JFrame("SwingApplication");

  • 8/9/2019 Creating GUI With JFC Swing -Minhhaivnnvn.minhhaifithou,

    12/65

    Gio trnh Java

    35559403.doc 12

    Bi 2: Cc khi ni m v ch c n ng c a Swing

    T rong bi ny s gi i thi u cc c tr ng c a Swing v gi ng gi i cc khini m c n thi t b n c th n m b t v s d ng cc thnh ph n Swing mcch c hi u qu . Ph n cu i c a bi h c ny s phn tch m t ch ng trnhSwing v y s l ph n t ng k t l i nh ng g b n h c trong bi ny .

    1. Cc thnh ph n Swing v s phn c p gi i h n.Swing cung c p r t nhi u thnh ph n GUI chu n nh : buttons, lists, menus, vtext areas, l nh ng thnh ph n m b n s ph i h p t o nn GUI cho ch ngtrnh c a b n. Ngoi ra, cn c cc i t ng ch a nh windows v tool bars.T rong ph n ny , chng ta s ti p t c xem xt thng qua v dSwingApplication c m t trong ph n A Quick T our of a SwingApplication's.

    V d ny s c p n m t vi thnh ph n Swing th n g dng v cch th cchng t ng tc v i nhau trong m t GUI v c a s phn c p gi i h n.

    SwingApplication t o 4 thnh ph n Swing th ng dng nh sau:

    y m t f rame, ho c m t c a s lm vi c chnh (JFrame)y

    m t panel , thng th ng g i l pane(JPanel )y m t button (JButton)

    y m t label (JLabel) f rame l i t ng ch a m c nh. is a top-level container . S hi n di nc a frame nh m cung c p m t vng cc thnh ph n khc thi t l p s c mc a mnh trn vng . Ngoi ra cn c cc thnh ph n khc th ng c sd ng lm i t ng ch a m c nh l dialogs (JDialog) v applets(JApplet). panel l i t ng ch a m c trung gian (intermediate container). panel nh mm c ch xc nh v tr c a button v label. Nh ng i t ng ch a m c trungian khc cn c scroll panes (JScrollPane) v tabbed panes (JT abbedPane),chng c nh h ng l n nhau, t ng tc v i nhau rtong giao di n c a m tch ng trnh.bu ttonv label l nh ng thnh ph n c b n (atomic components), nh ng thnh ph n m khng th ch a cc thnh ph n Swing khc AWT thng th ng, ccthnh ph n c b n ny s l n i nh n thng tin u vo t pha ng i dngSwing API cung c p nhi u thnh ph n c b n, bao g m combo boxes(JComboBox), text fields (JT extField), v tables (JT able).

  • 8/9/2019 Creating GUI With JFC Swing -Minhhaivnnvn.minhhaifithou,

    13/65

    Gio trnh Java

    35559403.doc 13

    Hnh d i y l s phn c p gi i h n c a cc thnh ph n trong v dSwingApplication.

    Nh hnh v trn, ngay c cc ch ng trnh Swing n gi nn nh t c ng cnhi u m c khc nhau. Nh ng bao gi g c c a s v n l i t ng ch a m c

    nh, n i cc thnh ph n Swing khc th hi n s t n t i c a mnh.

    Mch n c: xem s phn c p c a b t k frame hay dialog no, chc n kch chu t vo border c a n ch n, nh nControl-Shift-F1.

    M i m t i t ng ch a m c nh u gin ti p ch a m t i t ng ch a trugian th ng c g i lcontent pane. Khi lm vi c, b n khng c n quan tmth no l i t ng ch a m c nh v ci no l i t ng ch a trung gianCh ng trnh s t ng qu n l cho b n . pane contains, tr c ti p ho c gin ti p ch a t t c cc thnh ph n s hi n thtrong GUI. Ring i v itop-level container th c menu bar , menu bar s

    ng trong m t vng c bi t n m ngoicontent pane. thm m t thnh ph n vo i t ng ch a, c th dng nhi u cch khc nhau

    c a ph ng th cadd(). Ph ng th cadd()c t nh t 1 i s (argument)o n m sau y s th c hi n vi c thm m tbu tton v m tlabel vo trong

    panel :frame = new JFrame(...);button = new JButton(...);label = new JLabel(...);pane = new JPanel();pane.add(button);pane.add(label);frame.getContentPane().add(pane, BorderLayout.CENTER);

    2. LayoutM anagement

    Cc i t ng ch a s d nglayou t managers xc l p kch th c v v trc a cc thnh ph n ch a trong n. Borders s nh h ng n layout c a SwingGUIs b ng cch lm cho cc thnh ph n l n ln.

    Hnh d i y hi n th GUI c a 5 ch ng trnh. GUI c a chng khc nhau ldo s d ng cclayou t managerskhc nhau xc nh kch th c v v tr c abu ttons.

  • 8/9/2019 Creating GUI With JFC Swing -Minhhaivnnvn.minhhaifithou,

    14/65

    Gio trnh Java

    35559403.doc 14

    Layou t management l qu trnh xc nh kch th c v v tr c a cc thnh ph n.M c nh, m i i t ng ch a s c m tlayou t manager .

    Java platform h tr s d ng 5layou t managers thng th ng nh t: B order Layou t, B ox Layou t, Flow Layou t, Grid B ag Layou t, v Grid Layou t. Nh nglayou t managers c thi t k hi n th a thnh ph n trong cng m tth i i m. V l p th 6,Card Layou t , l m t tr ng h p c bi t. N c sd ng k t h p cclayou t managersv i nhau.

    X c l p Layo ut Manager

    B n c th d dng thay i m tlayou t managerstr thnh m tcontainer s d ng. n gi n l ch c n g i ph ng th csetLayout. o n m sau y sd ngBorderLayout:

    JPanel pane = new JPanel();pane.setLayout(new BorderLayout());

    M t vi g i v Component (Pr oviding Hints about a Component)T a c th s d ng cc ph ng th c sau ty bi n kch th c v v tr c a ccthnh ph n:setMinimumSize, setPreferredSize , v setMaximumSize,ho c c th xy d ng cc l p con c a cc thnh ph n khai thc cc ph ngth c nh :getMinimumSize, getPreferredSize, vgetMaximumSize.

    Bn c nh vi c cung c p cc ty bi n v kch th c, ta c ng cn c th cung c pthm cc ty bi n v vi c canh ch nh, g m cc ph ng th c sau:setAlignmentX v setAlignmentY, getAlignmentX v getAlignmentYmethods.

    How Layo ut Management Occurs

    V d sau y m t trnh t qu trnh hi n th c a m t frame (JFrame).

    1. Khi GUI c xy d ng,JFrame s g i ph ng th cpack. Vi c chnh ny s b o m f rame xu t hi n ng v i kch th c m n

    c xc l p tr c .

    2. T o find the frame's preferred size, the frame's layout manager adds thesize of the frame's edges to the preferred size of the component directly

  • 8/9/2019 Creating GUI With JFC Swing -Minhhaivnnvn.minhhaifithou,

    15/65

    Gio trnh Java

    35559403.doc 15

    contained by the frame.T his is the sum of the preferred size of theframe's content pane, plus the size of the frame's menu bar, if any.

    3. T he content pane's layout manager is responsible for figuring out thecontent pane's preferred size. By default, this layout manager is aBorderLayoutobject. However, let's assume that we replace it with aGridLayoutobject that's set up to create two columns, as in the bottom

    right of the preceding snapshot.T

    he interesting thing about grid layoutis that it forces all components to be the same size, and it tries to makethem as wide as the widest component's preferred width and as high ashighest one's preferred height.

    First, the grid layout manager queries the content pane for itsinsets -- the size of the content pane's border, if any. Next, thegrid layout manager queries each component in the content panefor its preferred size, noting the largest preferred width andlargest preferred height. Then it calculates the content pane'spreferred size.

    4. When each button is asked for its preferred size, the button first checkswhether the user specified a preferred size. If so, it reports that size. If not, it queries its look and feel for the preferred size.

    3. Event Handling

    E vent handling th hi n vi c ch ng trnh ph n h i cc yu c u t pha bnngoi, v d nh vi c ng i dng nh n phm chu t . Ch ng trnh Swing sth c hi n t t c cc thao tc v n m b t cc s ki n (event handling) b ng cchth c hi n ti n trnh c a s ki n.

    M i khi ng i dng nh n phm hay kch chu t , th m t s ki n x y ra. B t ki t ng no cng u c gn b i m t s ki n. Cc thnh ph n Swing c

    th t o ra nhi u ki u s ki n khc nhau. B ng sau y li t k m t vi ki u ski n:

    Hnh ng Ki u ListenerUser kch vo nt l nh, nh n phm Spacebar khi anglm vi c trong text field, ho c kch ch n vo menuitem

    ActionListener

    User ng m t frame (main window) WindowListener User nh n m t nt chu t trong khi ang r chu t trnm t thnh ph n MouseListener

    User di chuy n chu t trn m t thnh ph n MouseMotionListener T hnh ph n hi n th ComponentListener T hnh ph n l y tr ng th i c a keyboard FocusListener Vi c ch n l a trongT able ho c list c thay i ListSelectionListener

    M i s ki n u c i di n b i m t i t ng v i t ng cung cthng tin v s ki n c ng nh nh n d ng c n i phat ra s ki n. Ngu n c

  • 8/9/2019 Creating GUI With JFC Swing -Minhhaivnnvn.minhhaifithou,

    16/65

    Gio trnh Java

    35559403.doc 16

    s ki n thng th ng l cc thnh ph n, nh ng nh ng ki u i t ng khcc ng c th l ngu n c a s ki n. Hnh sau y minh ho cho v n ny.

    Caption: Multiple listenerscan register t o be n otified of eventsof a particular type fr om a particular source.

    Cch th c t hi m t Event Handler (How to Implement an Event Handler)M i event handler i h i c 3 b c nh sau:

    1. T rong ph n khai bo cho l p event handler , xc nh r m i l p s th cthi m t listener interface ho c k th a m t l p m l p th c thi m tlistener interface. V d :

    2. public class MyClass implements ActionListener {

    3. ng k s hi n di n c a l p event handler nh l m t listener trn m tho c nhi u thnh ph n. V d :

    4. someComponent.addActionListener(instanceOfMyClass);

    5. T h c thi nh ng ph ng th c trong listener interface. V d :6. public void actionPerformed(ActionEvent e) {7. ...//code that reacts to the action... 8. }

    Hy xem xt cch th c m t nt l nh (JButton) n m b t s ki n kch chu t. xc nh khi no th ng i dng kch chu t ln nt l nh (ho c dng cc phmnng) th m t ch ng trnh ph i c i t ng th c thi giao di n Action Listener .Ch ng trnh ph i ng k i t ng nh l m t action listener trn nt l nh(ngu n c a s ki n) b ng cch s d ng ph ng th caddAction Listener . Khiuser kch ln nt l nh, nt l nh s pht ra m t hnh vi c a s ki n. y l yuc u c a ph ng th cactionPer f ormed.T rong ph ng th c ny, tham s s lm t i t ng Action E vent v tham s ny s cung c p thng tin v s ki n vngu n c a s ki n.

    Caption: K hi user v o nt l nh, action listeners c a nt l nh c p ht r a.

    Ti n trnh v Event Handling (Threads and Event Handling) M c a event-handling x y ra trong m t ti n trnh n hay cn g i levent-dispatching thread . i u ny nh m m b o l m i event handler hon thnh

  • 8/9/2019 Creating GUI With JFC Swing -Minhhaivnnvn.minhhaifithou,

    17/65

    Gio trnh Java

    35559403.doc 17

    vi c th c hi n tr c khi m t event handler x y ra. v d minh ho trn, ph ng th cactionPerformed c x l trong m t ti n trnh n.

    4. Painting

    Painting ngh a l v cc thnh ph n trn mn hnh.M c d u vi c ty ch n ccthnh ph n c th c hi n m t cch d dng, nh ng h u h t cc ch ng trnh

    u b lm ph c t p ln b ng cch ty ch n ng vi n cho cc thnh ph n.

    Cch lm vi c c a Painting (How Painting Works)

    Khi m t Swing GUI c n v l i giao di n c a chnh n, ho c khi c n lm t inh ng i u ch nh v tr ng thi c a ch ng trnh, n s kh i ng thnh ph n m c cao nh t (top-level component) c n c v l i v lm vi c d n xu ngtheo lu ng phn c p. Qu trnh x l ny c th c hi n b i h th ng AWT nhm lm cho ch ng trnh c v hi u qu v thch ng h n .

    Cc thnh ph n Swing c th v l i chnh n b t k khi no c n thi t . Khi g ph ng th c setText trn m t thnh ph n, thnh ph n s t ng v l i chnhn, thay i kch th c,

    C ng gi ng nh event-handling, painting c ng c th c hi n trong m t ti ntrnh n.T rong khi m t s ki n ang x y ra th qu trnh v l i khng cth c hi n.

    Qu trnh v l i cc thnh ph n s khng b ng t qu ng b i cc s ki n khc .V d minh ho v Painting (An Example of Painting)

    minh ho cho qu trnh painting, ta s d ng l i ch ng trnhSwingApplication. Hnh d i l giao di n c aSwingApplication:

    S phn c p:

    Khi GUI c aSwingApplication c v , qu trnh x y ra nh sau:

    1. i t ng ch a m c nh,JFrame , s v l i n tr c tin.

  • 8/9/2019 Creating GUI With JFC Swing -Minhhaivnnvn.minhhaifithou,

    18/65

    Gio trnh Java

    35559403.doc 18

    2. Cc i t ng ch a trung gian, tr c h t l v l i background, ch a n.Sau s l JPane.

    3. JPanel tr c h t s v l i background, sau l ng vi n v saucng l cc thnh ph n con ch a trong n.

    4. v l i,JButton v n n c a n, sau l dng v n b n c a chnh n .

    5. JLabel v l i v n b n c a n.i u ny c ngh a l, cc thnh ph n s v l i chnh b n thn n tr c khi ni u khi n cc thnh ph n ch a trong n v l i. Hnh sau y minh ho nh ng

    thnh ph n th a k t JComponent v v l i chnh b n thn n:1. back ground(if opaque)

    2. custompainting (if any)

    3. border(if any)

    4. children (if any)

    5. T hreads and Swing

    N u lm vi c cc thnh ph n m nh ng thnh ph n ph thu c ho c nhh ng n tr ng thi c a n, ta c n ph i th c hi n chng trong m t ti n trnh

    n. T uy nhin, nh ng ch ng trnh khc c n s d ng ph ng th cinvoke Later th c hi n vi c g i c thnh ph n c lin quan trong ti n trnh

    y.

    N u m t ch ng trnh t o ra v ch lm vi c trn GUI c a chnh n, th khngc n quan tm v ti n trnh. V d , ch ng trnh l m t applet, n s m b o anton khi l u c u trc c a n trong ph ng th cinit . T h m ch, khi ch ng trnhl m t ng d ng nh d i y, th v n m b o c s an ton ni trn:

    //Thread-safe examplepublic class MyApplication {

    public static void main(String[] args) {JFrame f = new JFrame(...);

    ...//Add components to the frame here... f.pack();

    f.setVisible(true);//Don't do any more GUI work here.}

    ...//All manipulation of the GUI -- setText, getText, etc. --//is performed in event handlers such as actionPerformed()....

    }

  • 8/9/2019 Creating GUI With JFC Swing -Minhhaivnnvn.minhhaifithou,

    19/65

    Gio trnh Java

    35559403.doc 19

    6. Nh ngtnh n ngv k hi ni m k hc c a Swing

    Swing cung c p nhi u tnh n ng. R t nhi u tnh n ng c cung c p b iJComponent class.M t vi tnh n ng th v s khng c c p n trong bi h c ny nh icons, actions, cng ngh Pluggable Look & Feel, assistivetechnologies, v separate models.

    6 .1 Nh ng t nh n ng c a Jc omponent (Features t hat JComponentPr ovides)

    Ngo i tr i t ng ch a m c nh, t t c cc thnh ph n khc b t u b ng t J u c th a k t l p Jcomponent.H u h t cc thnh ph n u c cctnh n ng chung nh tooltips v c u hnh v giao di n (look and feel). Ngoi ra,chng cn th a k nhi u ph ng th c ti n l i khc n a .

    6.2 Icons

    Nhi u thnh ph n Swing, t bi t l button v label, c th hi n th hnh nhT a c th ch nh cho cc hnh nh ny nh l cc i t ngicon

    6.3 ActionsV i i t ng Action, Swing API cung c p nh ng h tr c bi t cho vi c chiax d li u v tr ng thi gi a hai ho c nhi u thnh ph n pht ra cc s ki n hnh

    ng. V d , khi ta c m t button v m t menu item cng m t ch c n ng, lcos c n cn nh c vi c s d ng i t ng Action xc nh v n b n, icon v

    tr ng thi c a hai thnh ph n.

    6.4 Supp ort f or Assistive Tec hnologies

    Assistive technologies such as screen readers can use the Accessibility API toget information from Swing components. Because support for the AccessibilityAPI is built into the Swing components, your Swing program will probablywork just fine with assistive technologies, even if you do nothing special. Withvery little extra effort, however, you can make your program function evenmore smoothly with assistive technologies, which might well expand itsmarket. SeeHow to Support AssistiveT echnologies for details.

    7. Ph n t ch m t ch ng trn h Swing

    Bao g m m t ng d ng nh v Swing v i tn g i lConverter s m t cchm t ch ng trnh Swing lm vi c v m i quan h g n k t nhau gi a cc o nm trong ch ng trnh.

    Converter l m t ng d ng dng chuy n i n v o l ng gi a hai hth ng met v U.S units. ch y c ng d ng ny th ph i bin d ch cc t ptin sau: Converter.java, ConversionPanel.java, ConverterRangeModel.java, DecimalField.java, FollowerRangeModel.java,FormattedDocu ment.java v Unit.java.

    Sau y l hnh nh minh ho v giao di n c aConverter:

  • 8/9/2019 Creating GUI With JFC Swing -Minhhaivnnvn.minhhaifithou,

    20/65

    Gio trnh Java

    35559403.doc 20

    T rong cc bi h c sau, chng ta s tm hi u chi ti t v cc tnh n ng, khi ni m vSwing. Ch c ch n s cn nhi u th v ang ch i chng ta

  • 8/9/2019 Creating GUI With JFC Swing -Minhhaivnnvn.minhhaifithou,

    21/65

    Gio trnh Java

    35559403.doc 21

    Bi 3: S d ng cc tnh n ngk hc c a Swing

    Bi h c ny h ng d n cch s d ng cc tnh n ng khc c a Swing .

    1. Cch s d ng Acti ons

    V i i t ng Action, ta c th s p x p v qu n l cc tr ng thi c a hai ho cnhi u thnh ph n t o ra s ki n c a hnh vi. V d , b n c th s d ng Action

    t o ra v qu n l m t button trn thanh cng c , m t menu bi u t ng cngth c hi n m t ch c n ng.Sau y l v d c a vi c s d ng Action t o ra m t button trn thanh cngc v m t menu item cng th c hi n m t ch c n ng:

    Action leftAction = new< a class that implements Action> (...);JButton button = toolBar.add(leftAction);JMenuItem menuItem = mainMenu.add(leftAction);

    i v i button hay menu item, c c nh ng h u ch th c s c a vi c sd ng Action,ta ph i t o thnh ph n s d ng ph ng th cadd(Action)c aJT oolBar, JM enu, ho c JPopupM enu.M c nh, khng c hm API no t n t i

    bn trnaddAction Listener(Action Listener) k t n i m t Actionv i m tthnh ph n khc ang t n t i th c s . t o m t i t ng Action,ni chung l ta ph i t o m t l p con c a l p

    AbstractActionv th c thi n. trong l p con ny, ta cho th c hi n ph ng th cactionPer f ormed tc ng ng c tr l i m t cch tho ng khi hnh vi ski n x y ra. Sau y l v d c a vi c t o v th c hi n l p con c a l p AbstractAction:

    leftAction = new AbstractAction("Go left",new ImageIcon("images/left.gif")) {

    public void actionPerformed(ActionEvent e) {

    displayResult("Action for first button/menu item", e);}};

    Hnh d i y l demo ng d ng c a vi c s d ng Action th c hi n ba tnhn ng.

    y l nh ng g nhn th y khi menu "Go left" tr nn disabled:

  • 8/9/2019 Creating GUI With JFC Swing -Minhhaivnnvn.minhhaifithou,

    22/65

    Gio trnh Java

    35559403.doc 22

    o n m c a "Go left" action:boolean selected = ...// true if the action should be enabled;

    //false, otherwise leftAction.setEnabled(selected);

    Sau khi t o ra thnh ph n s d ng Action, ta c th ty bi n chng theo thchc a mnh. V d nh khi mu n thm vo dng tooltip c a m t button, ho c ty bi n vi c xu t hi n hay bi n m t c a c thnh ph n b ng cch thm vo , xo cc icon, dng v n b n:

    button = toolBar.add(leftAction);button.setText(""); //an icon-only buttonbutton.setToolTipText("This is the left button");menuItem = mainMenu.add(leftAction);menuItem.setIcon(null); //arbitrarily chose not to use icon in menu

    The Action API

    B ng sau y li t k nh ng ph ng th c v contructors th ng dng cc Action.Cc hm API s d ng i t ng Action c chia thnh hai lo i nhsau:

    y T o v s d ng m t Action

    y T o m t thnh ph n i u khi n Action(Action-Controlled Component)Creating and Using an Action Constructor or Method Purpose

    AbstractAction() AbstractAction(String) AbstractAction(String,Icon)

    T o m t i t ng Action. T hng qua cc tham sc a ph ng th c hay Contructors, c th xc l pv n b n hay icon trong thnh ph n y.

    voidsetEnabled(boolean)boolean isEnabled()

    Xc l p hay nh n bi t c thnh ph n c nh n ctc ng hay khng.T hng qua ph ng th c set E nabled( f alse), v hi u t t c cc tc ng lncc thnh ph n.T ng t nh v y, s d ng ph ng th c set E nabled(tr u e) tc ng l ihnh vi c a cc thnh ph n.

    Creating an Action-Controlled Component Method Purpose

  • 8/9/2019 Creating GUI With JFC Swing -Minhhaivnnvn.minhhaifithou,

    23/65

    Gio trnh Java

    35559403.doc 23

    JMenuItemadd(Action)JMenuIteminsert(Action, int) (in JM enu and JP opup M enu )

    T o m t i t ng JMenuI tem v t chng votrong menu hay popup menu.

    JButton add(Action) (in JT oolBar )

    T o m t i t ng Jbu ttonv t chng ln thanhcng c .

    2 . Th no l k thu t h tr Assisive (Supp ort Assistive Tec hnologies)

    Cc thnh ph n Swing h tr k thu t tr gip . Ch ng trnh c a b n s ch tr t t h n. V d nh dng tooltip s hi n ln ch c n ng c a m t nt l nhno khi ta di chuy n chu t ln nt l nh .

    3. Cch s d ng cc ng vi n(Border)

    Borders s em l i cho chng ta nhi u thu n l i trong vi c v cc ng th ngtiu hay cc vng tr ng c a m t thnh ph n.T rong cc v d c a ph n nyc s d ng r t nhi u border. y, chng ta s tm hi u cch thm m t border vo b t k thnh ph nJComponent no.

    4 . Cch s d ng Ic ons

    Nhi u thnh ph n Swing c th hi n th icons (JLabel v JButton). T h ng thicons l tr ng h p c bi t c aImageIcon class.

    M t vi thnh ph n Swing nh J Label v J Bu tton, c th c trang tr b i m ticon. Icon l m t i t ng g n k t ch t ch v i giao di n Icon. Swing cung

    c p cho giao di n I con cch th c hi n r t t bi t v hi u qu v m t I cont g m t t p tin nh c d ng th c GIF ho c JPEG.

    Hnh d i y minh ho m t ng d ng s d ng m t Icon trang tr cho hailabel:

    T rong ph n m c a ch ng trnh, cu l nh (1) dng t o icon s d ng m ticon, cu l nh (2) v (3) gn icon y vo trong hai label::

    (1) ImageIcon icon = new ImageIcon("images/middle.gif","a pretty but meaningless splat");

    ...(2) label1 = new JLabel("Image and Text", icon,JLabel.CENTER);

  • 8/9/2019 Creating GUI With JFC Swing -Minhhaivnnvn.minhhaifithou,

    24/65

    Gio trnh Java

    35559403.doc 24

    ...(3) label3 = new JLabel(icon);

    T ham s th nh t trongImageIcon constructor xc nh t p tin nh n p ln, ph n ny ph i n ng d n t i th m c c ch a t p tin class .T ham sth hai dng m t v icon y, gi ng nh ph n tooltip c a cc ng d ng mchng ta v n th ng th y. Ni chung, cc applet n p hnh nh t my tnh, n i ph c v cho applet y. Chai l do lm nh v y, th nh t l khng tin t ng khi cc applet c cct p tin h thng t my n ang ch y.T h hai l k t h p cc l p c a appletv i t p tin d li u v i nhau. n p m t hnh nh t server, m t applet ph i sd ng URL nh o n m trong v d d i y :

    public class S omeClass extends JApplet ... {protected String leftButtonFilename = "images/left.gif";...public void init() {

    ...URL leftButtonURL = getURL(leftButtonFilename);...leftButtonIcon = new ImageIcon(leftButtonURL,

    "an arrow pointing left");...

    }...protected URL getURL(String filename) {

    URL codeBase = getCodeBase();URL url = null;

    try {url = new URL(codeBase, filename);

    } catch ( java.net.MalformedURLException e) {System.err.println("Couldn't create image: " +

    "badly specified URL");return null;

    }

    return url;}...

    }y

    V i m i image icon, n s d ng m t i t ng image ch a d li uc a hnh nh v i t ngM ediaT racker c chia s cho t t c ccicon trong cng m t ch ng trnh.

    X c nh h nh nh ngu n (Specif ying the Image S ource)

    T h ng th d li u c a m t hnh nh xu t pht t m t t p tin hnh nh. C thxc nh n i l u tr c a t p tin thng qua tn t p tin ho c s d ng i t ngURL. i v i ng d ng, tn t p tin ho c URL u c lin quan n th m cch a ch a t p tin .class c a ng d ng ho c l ng d n. ch nh m t UR

  • 8/9/2019 Creating GUI With JFC Swing -Minhhaivnnvn.minhhaifithou,

    25/65

    Gio trnh Java

    35559403.doc 25

    lin quan n ng d n c a ng d ng , ta c th s d ng ph ng th cgetSystemResource nh v d d i y:

    ImageIcon icon = null;URL iconURL =ClassLoader.getSystemResource("images/middle.gif");if (iconURL != null) {

    icon = new ImageIcon(iconURL,"a beautiful yet meaningless icon");

    }Ph ng th c getSystemResource s d tm trong th m c v t p tin JAR trong

    ng d n c a ch ng trnh, tr v URL ngay khi n tm th y. V d , khi taa vo ng d n c a ng d ng t p tin jar c tn icons.jar, n u t p tin JAR c

    ch a images/middle.gif, th d at khot, ng d n s tr v m t URL xc ncho images/middle.gif.T uy nhin, c th l URL khng c b t c lin quanno v t p tin icons.jar.

    The Image Icon API

    B ng sau y li t k nh ng c u trc v ph ng th c s d ng thng th ng c aImageIcon. constructors and methods. L u lImageIcon khng c ngu ng c t JComponent hay th m ch l tComponent.Setting, Getting, and Painting the Image Icon's Image Method orConstructor Purpose

    ImageIcon()ImageIcon(byte[])ImageIcon(byte[],String)ImageIcon(Image)ImageIcon(Image,String)ImageIcon(String)ImageIcon(String,String)ImageIcon(URL)ImageIcon(URL,String)

    T o m tImageIcon instance, kh i t o n ch a hnhnh c xc l p.T ham s th nh t ch ra ngu n c a

    hnh nh nh image, s byte, tn t p tin, hay URL.T

    hnh nh s c n p ln. Ngu n c a hnh nh ph i cd ng th c file c h tr b i l p java.awt.Image cui l GIF ho c JPEG.

    voidsetImage(Image)Image getImage()

    Xc l p ho c l y image hi n th b i image icon.

  • 8/9/2019 Creating GUI With JFC Swing -Minhhaivnnvn.minhhaifithou,

    26/65

    Gio trnh Java

    35559403.doc 26

    voidpaintIcon(Component, Graphics, int,int)

    V nh c a icon trong vng ho c chnhPaint the image icon's image in the specified

    graphics context. You would do this only if you'reimplementing a custom component that performs its own painting.T he Component object is used as an imageobserver. You can rely on the default behavior provided by Component class and pass in any component.T hetwo int argments specify the x and y coordinates,respectively.

    Setting or Getting Information about the Image Icon Method Purpose voidsetDescription(String)StringgetDescription()

    Set or get a description of the image.T his description isintended for use by assistive technologies.

    int getIconWidth()int getIconHeight() Get the width or height of the image icon in pixels. Watching the Image Icon's Image Load Method Purpose voidsetImageObserver(ImageObserver)ImageObserver getImageObserver()

    Set or get an image observer for the imageicon.

    int getImageLoadStatus()Get the loading status of the image icon'simage. T he set of values returned by thismethod are defined byMediaTracker .

    5 . S d ng ti n trn h(Threads)

    S d ng ti n trnh l m t cng vi c kh kh n. Do n u c th c th b nnn trnh ph n ny.T uy nhinT hread c th gip c i ti n ch ng trnh c a b n b ng cch qu n l s th c thi.

    Nguyn t c u tin khi s d ng threads l: trnh dng chng n u nh c th .T hreads c th r t kh s d ng v chng c th gy kh kh n khi chng tadebug ch ng trnh. trnh tr ng h p b nh tr c a ch ng trnh, c n phquan tm ngay t u r ng m i ti n trnh c t o ra khng ku g i th c thi bk m t thnh ph n Swing no.M c d nguy hi m, nh ng threads r t cso gi tr khi ta s d ng chng m t cchc n th n.T a c th c i thi n vi c th c hi n ch ng trnh. i khi, m t vi ti ntrnh lm n gi n m ho c c u trc c a m t ch ng trnh. Sau y l m t vitnh hu ng khi s d ng ti n trnh:

    y T o move a time-consuming initialization task out of the main thread, sothat the GUI comes up faster. Examples of time-consuming tasks

  • 8/9/2019 Creating GUI With JFC Swing -Minhhaivnnvn.minhhaifithou,

    27/65

    Gio trnh Java

    35559403.doc 27

    include making extensive calculations and blocking for network or disk I/O (loading images, for example).

    y T o move a time-consuming task out of the event-dispatching thread, sothat the GUI remains responsive.

    y T o perform an operation repeatedly, usually with some predetermined period of time between operations.

    y T o wait for messages from other programs.

    N u t o m t thread, c n ph i trnh nh ng nguy hi m khi th c thi m t ti n trnhv i cc l p ti n ch nh SwingWorker hayT imer. i t ng SwingWorker t om t thread th c thi m t qui trnh x l v th i gian. Sau khi qui trnh honthnh, SwingWorker cung c p m t vi ty ch n th c hi n vi c g i i m t ski n. i t ngT imer th c thi m t thread v sinh ra m t ho c nhi u hnh vi ski n sau khi xc nh c l p l i.

    6 . S d ng Timers

    V i l pTimer , b n c th cho th c hi n m t ti n trnh c a vi c th c thi m thnh ng sau m t kho ng th i gian xc nh v l p l i hnh vi y .

    C hai cch th c hi nT imer:

    y T h c hi n m t tc v , v i th i gian l p l i c xc nh. V d , tool tipmanager s d ng timers quy t nh khi no th hi n th v khi no tht t n i.

    y T h c hi n vi c l p i l p l i m t tc v .

    T

    rong v d d i y s d ng i t ng timer th hi n ti n tr nh lm vic a m t tc v .

    V y l o n m c a ch ng trnhProgressBarDemo. java. public final static int ONE_SECOND = 1000;...timer = new Timer(ONE_SECOND, new ActionListener(){

    public void actionPerformed(ActionEvent evt) { //... P erform a task... }

    });Khi user nh n vo ntStart, ch ng trnh kh i ng timer:

  • 8/9/2019 Creating GUI With JFC Swing -Minhhaivnnvn.minhhaifithou,

    28/65

    Gio trnh Java

    35559403.doc 28

    timer.start();V khi tc v hon thnh, action listener c a timer s d ng timer:

    if ( /* task is done */ ) {...timer.stop();...

    }The Timer API

    B ng sau y li t k nh ng c u trc v ph ng th c c aT imer. Cc hm APIv s d ng timers chia thnh hai lo i nh sau:

    y T o v kh i ngT imer

    y Ch y m tT imer Creating and Initializing theT imer Method orConstructor Purpose

    Timer(int, ActionListener)

    T o m t timer.T ham s int ch r th i gian d ng(milliseconds) gi a hai hnh vi s ki n. S d ngsetDelay

    thay i tr .T ham s th hai l m t action listener, lm t constructor dng nh n bi t v i m t timer. Ngoi ra,cn c th ng k action listeners v iaddActionListener v g b chng b ngremoveActionlistener .

    void setDelay(int)int getDelay() Xc l p ho c l y s milliseconds.

    voidsetInitialDelay(int

    )intgetInitialDelay()

    Xc l p ho c l y s milliseconds ch tr c khi b t uhnh vi s ki n th nh t.

    voidsetRepeats(boolean)booleanisRepeats()

    Xc l p ho c ch ra timer c l p l i hay khng.M c nhc gi tr true. G isetRepeats(false) kh i u cho m ttimer kh i ng v k t thc m t hnh.

    voidsetCoalesce(boolean)booleanisCoalesce()

    Xc l p ho c ch ra timer c lin t c hay khng. G i m thnh vi s ki n vo m t hnh vi s ki n n.M c nh cgi tr true.

    Running theT imer Method Purpose void start()void restart()

    Kh i ng timer.restart cn c th thot b t k m t hnh vis ki n no c g i t i.

    void stop() D ng ho t ng c a m t timer. boolean Ki m tra xem c timer.

  • 8/9/2019 Creating GUI With JFC Swing -Minhhaivnnvn.minhhaifithou,

    29/65

    Gio trnh Java

    35559403.doc 29

    isRunning()

  • 8/9/2019 Creating GUI With JFC Swing -Minhhaivnnvn.minhhaifithou,

    30/65

    Gio trnh Java

    35559403.doc 30

    Bi 4: B tr cc t hn h ph n bn tr ong cc i t ng c h a

    Bi h c ny s h ng d n b n cch qu n l vi c by tr m Java Platform cungc p, cch s d ng v tr tuy t i.

    1. S d ng L ayout Managers

    Ph n ny cung c p cc qui t c t ng quan v chi ti t l nh trong vi c s d ngvi c qu n l b tr m Java platform cung c p.

    a. S d ng L ayo ut ManagersS d ng BorderLayout

    Sau y l m t Applet cho th y BorderLayout lm vi c nh th no .setLayout(new BorderLayout());setFont(new Font("Helvetica", Font.PLAIN, 14));

    add("North", new Button("North"));add("South", new Button("South"));add("East", new Button("East"));

    add("West", new Button("West"));add("Center", new Button("Center"));Quan tr ng : khi thm m t thnh ph n vo m t Container s d ngBorderLayout, b n nn dng ph ng th c add() hai thng s , v thngs th nh t ph i l "North", "South", "East", "West", ho c "Center". N ub n s d ng ph ng th c add()m t thng s hay b n khng xc l pthng s th nh t th thnh ph n s khng hi n th .Theo m c nh, BorderLayout khng t kho ng tr ng gi a cc thnh.Mu n v y, b n ph i xc l p n b ng cch dng c u trc sau : public BorderLayout(int horizontalGap, int verticalGap)

    S d ng CardLayout

    Sau y l m t Applet cho th yCardLayoutlm vi c nh th no. //Where instance variables are declared: Panel cards;final static String BUTTONPANEL = "Panel with Buttons";final static String TEXTPANEL = "Panel with TextField";

    //Where the container is initialized: cards = new Panel();cards.setLayout(new CardLayout());

    ...//Create a P anel named p1. P ut buttons in it .

    ...//Create a P anel named p2. P ut a text field in it. cards.add(BUTTONPANEL, p1);cards.add(TEXTPANEL, p2);

    Khi b n thm m t thnh ph n vo m t Container m c s d ng CardLayout, b n ph i s d ng ph ng th cadd() hai thng s :add(String name,Component comp). T hng s th nh t c th b t k chu i no nh n rathnh ph n c thm vo.Sau y l m t o n m v d cho ph ng th c trn :

  • 8/9/2019 Creating GUI With JFC Swing -Minhhaivnnvn.minhhaifithou,

    31/65

    Gio trnh Java

    35559403.doc 31

    //Where the container is initialized: . . .

    //Put the Choice in a Panel to get a nicer look.Panel cp = new Panel();Choice c = new Choice();c.addItem(BUTTONPANEL);c.addItem(TEXTPANEL);cp.add(c);add("North", cp);

    . . .

    public boolean action(Event evt, Ob ject arg) {if (evt.target instanceof Choice) {

    ((CardLayout)cards.getLayout()).show(cards,(String)arg);return true;

    }return false;

    } Nh o n m trn, b n c th s d ng ph ng th cshow() c a CardLayout xc l p thnh ph n hi n th hi n t i .T hng s th nh t c a ph ng th cshow() l Container m CardLayout i u khi n. thng s th hai l chu i xc nh thnh ph n hi n th . Chu i ny gi ng nh chu i c a thnh ph n thmvo Container.Theo sau l t t c cc ph ng th c c a CardLayout m c th chophp ch n m t thnh ph n. cho m i ph ng th c, thng s th nh tContainer cho CardLayout l m t Layout Manager.

    public void first(Container parent)public void next(Container parent)public void previous(Container parent)public void last(Container parent)

    public void show(Container parent, String name) S d ng FlowLayout

    Sau y l m t Applet cho th yFlowLayoutho t ng nh th no.setLayout(new FlowLayout());setFont(new Font("Helvetica", Font.PLAIN, 14));add(new Button("Button 1"));add(new Button("2"));add(new Button("Button 3"));add(new Button("Long-Named Button 4"));add(new Button("Button 5"));

    L p FlowLayout c ba c u trc:public FlowLayout()public FlowLayout(int alignment)public FlowLayout(int alignment,

    int horizontalGap, int verticalGap)thng s alignment ph i l cc gi tr FlowLayout.LEFT,

    FlowLayout.CENTER, ho c FlowLayout.RIGHT. T hng s horizontalGap v

  • 8/9/2019 Creating GUI With JFC Swing -Minhhaivnnvn.minhhaifithou,

    32/65

    Gio trnh Java

    35559403.doc 32

    verticalGap xc nh s Pixel c gi a cc thnh ph n. N u b n khng xc l p gi trny, FlowLayout s m c nh gi tri 5 cho m i thng s .

    S d ng GridL ayoutSau y l m t Aplet cho th y GridLayout lm vi c nh th no.

    //Construct a GridLayout with 2 columns and an unspecifiednumber of rows.setLayout(new GridLayout(0,2));setFont(new Font("Helvetica", Font.PLAIN, 14));add(new Button("Button 1"));add(new Button("2"));add(new Button("Button 3"));add(new Button("Long-Named Button 4"));add(new Button("Button 5"));

    C u trc trn cho th y l p GridLayout t o m t i t ng c hai c t v nhi uhng. y l m t trong hai c u trc cho GridLayout. Sau y l cch khai bocho c hai c u trc ny:

    public GridLayout(int rows, int columns)public GridLayout(int rows, int columns,

    int horizontalGap, int verticalGap)S d ng GridBagLayout

    T heo sau l m t vi o n l nh tiu bi u trong m t Container c s d ngGridBagLayout.

    GridBagLayout gridbag = new GridBagLayout();GridBagConstraints c = new GridBagConstraints();setLayout(gridbag);

    //For each component to be added to this container: //...Create the component... //... S et instance variables in the GridBagConstraints instance... gridbag.setConstraints(theComponent, c);add(theComponent);

    B n c th s d ng l i m t i t ng c a GridBagConstraints cho nhi u thnh ph n khc nhau, ngay c khi cc thnh ph n c s rng bu c khc nhau.GridBagLayout rt ra m t gi tr rng bu c v khng dng l iGridBagConstraints. B n ph i c n th n, tuy nhin, kh i t o l i gi tr cm t i t ng GridBagConstraints lm gi tr m c nh khi c n thi t .B n c th xc l p cc gi tr sau :gridx, gridy Xc nh hng v c t t i v tr trn bn ti c a thnh ph n. H u h t c t trn bt i c c chgridx=0, v hng trn cng c a chgridy=0. S d ngGridBagConstraints.RELATIVE(gi tr m c nh) xc nh r ng thnh ph n ch bn ph i hay pha d i .gridwidth, gridheight xc l p s c t ho c s hng trong vng hi n th c a thnh ph n. nh ng gi trny xc nh s Cell m thnh ph n s d ng, khng ph i s Pixel n s d ngM c nh l 1. S d ngGridBagConstraints.REMAINDER xc nhthnh ph n ang hng cu i cng hay c t cu i cng . S d ng

  • 8/9/2019 Creating GUI With JFC Swing -Minhhaivnnvn.minhhaifithou,

    33/65

    Gio trnh Java

    35559403.doc 33

    GridBagConstraints.RELATIVE xc nh b c k ti p c a than h ph n lhng cu i hay c t cu i cng.fill

    c s d ng khi vng hi n th c a thnh ph n l n h n kich th c thnh ph ni h i quy t nh khi no ho c thay i kch th c nh th no . cc gi t

    thch h p l GridBagConstraints.NONE (m c nh),GridBagConstraints.HORIZONTAL, GridBagConstraints.VERTICALvGridBagConstraints.BOTH. ipadx, ipady xc nh ph n ph bn trong: bao nhiu thm vo kch th c t i thi u c athnh ph n. gi tr m c nh l 0. Chi u r ng c a thnh ph n t i thi u nh t b ng chi u r ng t i thi u c a n c ng v iipadx*2. Similarly, chi u cao c athnh ph n t i thi u nh t l b ng chi u cao t i thi u c a n c ng v iipady*2.insets xc nh ph n ph bn ngoi c a thnh ph n. m c nh, m i thnh ph n khnc ph n ph bn ngoi.anchor

    c s d ng khi thnh ph n nh h n vng hi n th quy t nh khi no thnh ph n. gi tr thch h p lGridBagConstraints.CENTER(m c nh),GridBagConstraints.NORTH, GridBagConstraints.NORTHEAST,GridBagConstraints.EAST, GridBagConstraints.SOUTHEAST,GridBagConstraints.SOUTH, GridBagConstraints.SOUTHWEST,GridBagConstraints.WEST, vGridBagConstraints.NORTHWEST.V d :Sau y l m t Applet ch cho th y GridBagLayout ho t ng nh th no.Sau y l m t o n l nh t o m t GridBagLayout v cc thnh ph n nqu n l

    protected void makebutton(String name,GridBagLayout gridbag,GridBagConstraints c) {

    Button button = new Button(name);gridbag.setConstraints(button, c);add(button);

    }

    public GridBagWindow() {GridBagLayout gridbag = new GridBagLayout();GridBagConstraints c = new GridBagConstraints();

    setFont(new Font("Helvetica", Font.PLAIN, 14));setLayout(gridbag);

    c.fill = GridBagConstraints.BOTH;c.weightx = 1.0;makebutton("Button1", gridbag, c);makebutton("Button2", gridbag, c);makebutton("Button3", gridbag, c);

    c.gridwidth = GridBagConstraints.REMAINDER; //end of row

  • 8/9/2019 Creating GUI With JFC Swing -Minhhaivnnvn.minhhaifithou,

    34/65

    Gio trnh Java

    35559403.doc 34

    makebutton("Button4", gridbag, c);

    c.weightx = 0.0; //reset to the defaultmakebutton("Button5", gridbag, c); //another row

    c.gridwidth = GridBagConstraints.RELATIVE; //next to last inrow

    makebutton("Button6", gridbag, c);c.gridwidth = GridBagConstraints.REMAINDER; //end of rowmakebutton("Button7", gridbag, c);

    c.gridwidth = 1; //reset to the defaultc.gridheight = 2;c.weighty = 1.0;makebutton("Button8", gridbag, c);

    c.weighty = 0.0; //reset to the defaultc.gridwidth = GridBagConstraints.REMAINDER; //end of rowc.gridheight = 1; //reset to the defaultmakebutton("Button9", gridbag, c);makebutton("Button10", gridbag, c);

    }

    2 . T o m t Cust om Layo ut Manager

    T hay v s d ng cch qu n l m Java platform cung c p, ta c th vi t m tch ng trnh qu n l c a chnh mnh. Qu n l b tr ph i th c thi

    LayoutManager interface, n i ch nh n m ph ng th c ph i c nhngh a. Vi c qu n l cch b tr c th th c thiLayoutManager2, l m t giaodi n con c aLayoutManager .

    N m ph ng th c c th c thi l:(1) void addLayo utComponent (String , Component) (2 )void removeLayoutComponent (Component) (3)Dimension preferredL ayoutSize (Container) (4 )Dimension minimumLayo utSize (Container) (5)void layo utContainer (Container)

    public void addLayoutComponent(String name, C omponent comp) Ch c g i b ng ph ng th cadd(name, component) c a Container.public void removeLayoutComponent(Component comp) G i b i nh ng ph ng th cremove() v removeAll()c a Container.public Dimension preferredLayoutSize(Container parent) G i b i ph ng th cpreferredSize() c a Container, c th t g i d i m itnh hu ng.public Dimension minimumLayoutSize(Container parent) G i b i ph ng th cminimumSize()c a Container, c th t g i d i m itnh hu ng.

  • 8/9/2019 Creating GUI With JFC Swing -Minhhaivnnvn.minhhaifithou,

    35/65

    Gio trnh Java

    35559403.doc 35

    public void layoutContainer(Container parent) G i khi Container hi n th l n uis first displayed, v m i lc n tahy i kchth c.

    3. Lm vi c khng c L ayo ut Manager (Absolute Positioning)

    If necessary, you can position components without using a layout manager.Generally, this solution is used to specify absolute sizes and positions for components.M c d c th lm vi c m khng c n LayoutM anager, b n nn dng LayoutM anager n u c th . Layout managers d thay i kch th c c a Container v

    i u ch nh hnh d ng c a cc thnh ph n ph thu c vo Platform. N cng cth c s d ng l b i cc Container va cc ch ng trnh khc. n u CustomContainer s khng ti s d ng, khng th thay i kch th c, v hon ton cth i u khi n c cc thng s ph thu c vo h th ng nh Font v hnhd ng cc thnh ph n.V d :

    public class NoneWindow extends Frame {. . .private boolean laidOut = false;private Button b1, b2, b3;

    public NoneWindow() {super();setLayout(null);setFont(new Font("Helvetica", Font.PLAIN, 14));

    b1 = new Button("one");add(b1);

    b2 = new Button("two");add(b2);b3 = new Button("three");add(b3);

    }

    public void paint(Graphics g) {if (!laidOut) {

    Insets insets = insets();/*

    * We're guaranteed that insets() will return a valid Insets

    * if called from paint() -- it isn't valid when called from* the constructor.*

    * We could perhaps cache this in an ivar, but insets can* change, and when they do, the AWT creates a whole new* Insets ob ject; the old one is invalid.*/b1.reshape(50 + insets.left, 5 + insets.top, 50, 20);b2.reshape(70 + insets.left, 35 + insets.top, 50, 20);b3.reshape(130 + insets.left, 15 + insets.top, 50, 30);

  • 8/9/2019 Creating GUI With JFC Swing -Minhhaivnnvn.minhhaifithou,

    36/65

    Gio trnh Java

    35559403.doc 36

    laidOut = true;}

    }

    . . .}

    4 . Gi i quy t cc v n v Layo utM t vi v n thng th ng v layout m th ng l cc thnh ph n hi n thqu nh ho c khng hi n th .T rong ph n ny s gip chng ta x l nh ng v n

    ny.Bi ton: Lm th no xc nh c chnh xc kch th c c a m t thnh ph n?

    y u tin, ch c ch n b n th t s mu n xc l p kch th c chnh xc c athnh ph n. nh ng thnh ph n chu n c kch th c khc nhau , phthu c vao Platform m thnh ph n ang ch y v Font n s d ng , vv y thwongf ch lm theo c m gic xc nh kch th c chnh xc c acc thnh ph n.

    i v i nh ng Custom Component c kch th c xc nh, xcnh kch th c chnh xc ch l c m gic ch quan. B n c n b

    qua cc ph ng th c minimumSize() v preferredSize() c athnh ph n tr v m t kch th c ng cho thnh ph n .

    thay i kch th c c a thnh ph n khi thnh ph n anghi n th , xem bi ton ti p theo.

    Bi ton: Lm th no thay i kch th c c a m t thnh ph n?y M t khi thnh ph n hi n th , b n c th thay i kch th c c a n

    b ng ph ng th cresize(). R i b n g i ph ng th cvalidate()

    Container v l i.Bi ton: T hnh ph n ang c kch th c qu nh .y T hnh ph n c th c thi nh ng ph ng th cpreferredSize() v

    minimumSize() hay khng? N u v y, n c tr v gi tr ng haykhng?

    y Khi b dng Layout manager, b n c th dng khng gian s n c haykhng?

    Bi 5: Vi t s k i n L isteners

    T rong bi h c ny s trnh by m t cch chi ti t lm th no vi t m t s ki nlisteners. hi u ph n ny th b n ph i c ki n th c v Event Handling .

    1. M t vi v d v Event-Handling

    Cc applets trong ph n ny s minh ho cho cc s ki n v qu trnh ti n hnhc a s ki n.

    2 . T ng quan v Writing Event Listeners

    Cung c p thng tin c n thi t v t t c cc ki u c a s ki n.M t trong nh ngtiu trong ph n ny l trnh by cch lm sao gi m b t cng s c v s

  • 8/9/2019 Creating GUI With JFC Swing -Minhhaivnnvn.minhhaifithou,

    37/65

    Gio trnh Java

    35559403.doc 37

    khng c n thi t c a vi c vi t code cho ch ng trnh b ng cch s d ng cc l ptrong th c thi cc s ki n.

    c th n m b t ph n ny m t cch d dng, xem nh b n c nh ng ki nth c c b n v cc s ki n listener trong ph n Event Handling. Ch ng h n nhta c th g n m t a listeners vo ngu n c a m t n s ki n. Nh ng quantr ng h n h t l cc ph ng th c event-listener s c x l m t cch nhanh

    chng. B i v t t c cc event-handling v cc ph ng th c v u c th chi n trong cung m t ti n trnh.T rong ph n ny, chng ta s bn vEventOb ject, m t l p con cho t t c ccs ki n AWT v Swing

    L y thng tin s ki n : Event Objects (Getting Event Inf ormation: EventObjects)

    M i m t ph ng th c event -listener u c m t i s n, m t i t ng thk t l p EventObject. method has a single argument -- an object that inheritsfrom theEventOb ject class.M c d i s lun xu t pht tEventOb ject,

    v i ki u t ng quan c th th c hi n chnh xc h n . V d nh khi n m b t ski n c a chu t, i s cho ph ng th c ny s l y tMouseEvent, m t l pcon c aEventOb ject.

    L p EventOb ject nh ngh a m t ph ng th c r t h u ch nh sau:Object getS ource () Ph ng th c ny tr v m t i t ng n m b t s ki n .Ch r ng ph ng th c getSource c ng tr v m t i t ng. L pEvent i khi c ng nh ngh a m t ph ng th c gi ng nh getSource,nh ng ki u c a gi tr tr v h i b h n ch . V d nh l pComponentEvent nh ngh a ph ng th c getComponent, gi ng nh

    getSource, tr v i t ng n m b t s ki n. Ci khc nhau y lgetComponent lun lun tr v m t Component.Th ng th m t l p s ki n no nh ngh a m t ph ng th c v trv thng tin c a s ki n.

    K hi ni m: Low-Level Events and Sem antic Events

    Cc s ki n c th c phn chia thnh 2 lo i:low-level events v semantic events. Low-level events m t window-system x y ra ho c d li u vo m cth p (low-level input).T t c cc s ki n cn l i thu c lo i semantic event.

    S ki n mouse v key, c hai u l k t qu tr c ti p t pha ng i dng, l

    nh ng s ki n low-level. Nh ng s ki n low-level khc bao g m component,container, focus, v window events. S ki n component cho php thay i vtr, kch th c v s hi n th c a thnh ph n. S ki n container qu n l n m b t c thnh ph n no khi c thm vo hay g b kh i cc i t ngch a. Focus events s bo cho bi t khi no m t thnh ph n l c ho c khngkeyboard f ocu s, kh n ng nh n bi t k t c g t i bn phm . Windowevents gip n m b t nh ng tr ng thi c n b n nh t c a b t k Window noch ng h n nh Dialog hay m t Frame.

  • 8/9/2019 Creating GUI With JFC Swing -Minhhaivnnvn.minhhaifithou,

    38/65

    Gio trnh Java

    35559403.doc 38

    Semantic events bao g m action events, item events, v list selection events.Hnh ng c a m i semantic event c th khc nhau do thnh ph n. V d nhm t button c th n m b t s ki n khi ng i dng kch chu t ln n . Nh ngm t text field n m b t s ki n khi ng i dng nh n Ret urn.

    S d ng Adapters and Inner Classes n m b t cc s k i n

    Ph n ny h ng d n b n s d ng cc l p adapters v inner lm gi m b t s lx n trong o n m c a ch ng trnh b n .H u h t cc giao di n AWT listener, khng nh ActionListener , ch a nhi u ho c m t ph ng th c. V d , giao di nMouseListener ch a n m ph ng th c:mousePressed , mouseReleased , mouseEntered , mouseExited, vmouseClicked. D l b n ch quan tm v nh n chu t, n u l p b n ang s d ngth c thiMouseListener th b n ph i th c thi t t c 5 ph ng th c.V d :

    //An example with cluttered but valid code.public class MyClass implements MouseListener {

    ...someOb ject.addMouseListener(this);

    .../* Empty method definition. */public void mousePressed(MouseEvent e) {}

    /* Empty method definition. */public void mouseReleased(MouseEvent e) {}

    /* Empty method definition. */

    public void mouseEntered(MouseEvent e) {}

    /* Empty method definition. */public void mouseExited(MouseEvent e) {}

    public void mouseClicked(MouseEvent e) {...//Event handler implementation goes here...

    }}

    ng ti c l k t qu c a s l a ch n cc ph ng th c r ng c th kh c v duy tr gip b n trnh c cc l n x n v i nh ng ph ng th c r ng trong ch ng trnhAWT cung c p l padapter class cho m ilistener inter f ace v i nhi u h n m t ph ngth c.

    s d ng adapter, b n t o m t l p con cho n, thay v ph i th c thi m t listenerinterface.

    /** An example of extending an adapter class instead of * directly implementing a listener interface.*/

  • 8/9/2019 Creating GUI With JFC Swing -Minhhaivnnvn.minhhaifithou,

    39/65

    Gio trnh Java

    35559403.doc 39

    public class MyClass extends MouseAdapter {...someOb ject.addMouseListener(this);

    ...public void mouseClicked(MouseEvent e) {...//Event handler implementation goes here...

    }}Gi d b n mu n vi t m t applet, v b n mu n Applet c a b n ch a vi o n m

    n m b t cc s ki n c a chu t.T khi ngn ng Java khhong cho php a th a k th b n khng th m r ng c 2 l p Applet andMouseAdapter . Gi i php l nh ngh am t l pinner -- m t l p n m trong Aplet -- that extends theMouseAdapter class,

    //An example of using an inner class.public class MyClass extends Applet {

    ...someOb ject.addMouseListener(new MyAdapter());

    ...class MyAdapter extends MouseAdapter {

    public void mouseClicked(MouseEvent e) {...//Event handler implementation goes here...

    }}

    } 3. H tr Listeners c a cc t hn h ph n Swing

    C th ni r ng lo i c a s ki n m t thnh ph n c th c phn lo i b ncch d a vo lo i c a s ki n listeners m ta ng k trn thnh ph n . V dnh l p Component nh ngh a nhng ph ng th c listener nh sau :

    y addComponentListener y addFocusListener

    y addKeyListener y addMouseListener

    y addMouseMotionListener Do v y, m i thnh ph n h tr component , focus, key, mouse, v mouse-motion listeners.T uy nhin, m t thnh ph n kh i ng nh ng s ki n mlisteners c ngky trn n. V d , m t mouse listener c ng k trn m tthnh ph n ring bi t, nh ng thnh ph n y khng c listeners khc, th thnh ph n s kh i ng ch m i s ki n mouse events, khng c cc s kicomponent, focus, key, or mouse-motion.

    Listeners t hat All Swing Components Supp ort

    V t t c cc thnh ph n Swing u xu t pht t l p AWT Component, chonn ta ph i khai bo nh ng listeners sau trn b t k thnh ph n Swing no :component listener

  • 8/9/2019 Creating GUI With JFC Swing -Minhhaivnnvn.minhhaifithou,

    40/65

    Gio trnh Java

    35559403.doc 40

    N m b t s thay i v kch th c, v tr v s hi n th c a thnh ph n.f ocuslistener N m b t cc thnh ph n c nh n hay khng tc ng t bn phm.key listener N m b t ng tc n phm; s ki n key ch kh i t o b i cc thnh ph n ang ctr ng thi m c nh c a bn phm.mouse events N m b t s ki n kch chu t v di chuy n chu t trn thnh ph n.mouse-motion events N m b t s thay i v v tr c a con tr trn thnh ph n .

    Cc Listeners k hc m cc t hn h ph n Swing h tr

    B ng sau y li t k cc thnh ph n Swing v listeners c h tr .T rongnhi u tr ng h p, cc s ki n c kh i ng tr c ti p t thnh ph n. Nh ngtr ng h p khc, cc s ki n c kh i ng t d li u c a thnh ph n ho c tcc ki u m u c ch n.

    Component

    L istener

    action caret change document,undoableedit

    item list selection window

    other

    button X X Xcheck box X X Xcolor chooser Xcombo box X Xdialog X

    editor pane X X

    hyperlink

    file chooser Xframe X

    internal frame internalframe

    list Xlistdata

    menu menu

    menu item X X X

    menukey

    me

  • 8/9/2019 Creating GUI With JFC Swing -Minhhaivnnvn.minhhaifithou,

    41/65

    Gio trnh Java

    35559403.doc 41

    nudragmouse

    option pane password field X X X

    popup menu

    popupmenu

    progress bar Xradio button X X Xslider X

    tabbed pane X

    table X

    tablemodel tablecolumnmodel

    celleditor

    text area X Xtext field X X X

    text pane X X

    hyp

    erlink

    toggle button X X X

    tree treeexpansion

  • 8/9/2019 Creating GUI With JFC Swing -Minhhaivnnvn.minhhaifithou,

    42/65

    Gio trnh Java

    35559403.doc 42

    treewillexpand treemodel treeselection

    viewport(used byscrollpane)

    X

    4 . Th c hi n Listeners c ho cc Handled Events t hng t h ng

    Ph n ny s bao g m cc chi ti t v v d v thng tin c a vi c vi t nh ng s

    ki n listener thng th ng.Vi t m t Action L istener Khi ng i s d ng kch chu t vo Button, p chu t vo ListItem, ch nM enuItem,ho c nh n phm trongT extField, m t s ki n s x y ra. K t qu l m t thng boactionPerformed c g i i n t t c cc action listener v n ng k v i ccthnh ph n c lin quan.Cc p h ng t h c , s ki n c a hn h ngGiao di n ActionListener ch a m t ph ng th c n, v do n khng c l padapter t ng ng. y l ph ng th c ActionListener c c:void action P erformed(ActionEvent) M t v d v n m b t cc s ki n c a hnh ngM t v d n gi n

    public class Beeper ... implements ActionListener {... // where initialization occu rs:

    button.addActionListener(this);... public void actionPerformed(ActionEvent e) {

    ... // Make a beep sou nd... }

    }

    Vi t m t Adjustment L istener Cc s ki n Adjustment thng bo cho b n bi t s thay i gi tr trong cc thnh ph n. i t ng Ad justable c m t gi tr nguyn, v n tr v cc cc s ki nadjustment b t c khi no gi tr thay i. Ch c m t l p c a AWT th c thi Ad justable l l pScrollbar .C 5 lo i s ki n adjustment:track ng i s d ng hon ton thay i gi tr c a thnh ph n.unit increment, unit decrement

  • 8/9/2019 Creating GUI With JFC Swing -Minhhaivnnvn.minhhaifithou,

    43/65

    Gio trnh Java

    35559403.doc 43

    ng i s d ng ch bi u th s thay i nh v gi tr c a thnh ph n.block increment, block decrementng i s d ng bi u th s thay i gi tr c a thnh ph n v i s l ng l n.Cc ph ngth c s k i nc a AdjustmentGiao di nAd justment Listener ch a m t ph ng th c n, v v th n khng cl p m ph ng t ng ng. Sau y l ph ng th c :void ad justmentValueChanged(Ad justmentEvent)

    c g i b i AWT v a sau khi thay i gi tr c a thnh ph n. V d v Handling Adjustment Eventsclass ConversionPanel ... implements AdjustmentListener ... {

    ...Scrollbar slider;...ConversionPanel(...) {

    ...slider.addAdjustmentListener(this);

    } .../** Respond to the slider. */ public void adjustmentValueChanged(AdjustmentEvent e) {

    textField.setT ext(String.valueOf(e.getValue()));controller.convert(this);

    } ...

    } L p AdjustmentEvent

    Ph ng th cad justmentValueChanged c m t thng s : m t i t ng Ad justmentEvent. L p Ad justmentEvent nh ngh a cc ph ng th c sau: Ad justable getAd justable() T r v thnh ph n m sinh ra s ki n . B n c th dng n thay v dng ph ngth cgetSource.int getAd justmentType() T r v ki u c a adjustment c tm th y. gi tr tr v l m t trong nh ng gi tr s

    c nh ngh a trong l p Ad justmentEvent: UNIT_INCREMENT,UNIT_DECREMENT, BLOCK_INCREMENT, BLOCK_DECREMENT, TRACK.int getValue() T r v gi tr c a thnh ph n ngay sau khi adjustment c tm th y.Vi t m t Component L istener l m t trong nh ng s k en c a thnh ph n c pht ra b i i t ngComponent ngay sau khi thnh ph n m t i, lm n i, chuy n v tr ho c thay i kch th cCc ph ngth c, s k i nc a thnh ph n Giao di n ComponentListener v l p m ph ng t ng ng,ComponentAdapter ,ch a 4 ph ng th c:void componentHidden(ComponentEvent)

    c g i b i AWT sau khi thnh ph n bi n m t b i ph ng th csetVisible.void componentMoved(ComponentEvent)

    c g i b i AWT sau khi thnh ph n di chuy n, n quan h v i i t ng ch a n.void componentResized(ComponentEvent)

    c g i b i AWT sau khi thnh ph n thay i kch th c.

  • 8/9/2019 Creating GUI With JFC Swing -Minhhaivnnvn.minhhaifithou,

    44/65

    Gio trnh Java

    35559403.doc 44

    void componentShown(ComponentEvent) c g i b i AWT sau khi thnh ph n xu t hi n b i ph ng th csetVisible.

    V d v Handling Component Events public class ComponentEventDemo ... implements ComponentListener {

    ... // where initialization occu rs:

    aFrame = new Frame("A Frame");ComponentPanel p = new ComponentPanel(this);aFrame.addComponentListener(this); p.addComponentListener(this);

    ...

    public void componentHidden(ComponentEvent e) {displayM essage("componentHidden event from "

    + e.getComponent().getClass().getName());}

    public void componentM oved(ComponentEvent e) {displayM essage("componentM oved event from "+ e.getComponent().getClass().getName());

    }

    public void componentResized(ComponentEvent e) {displayM essage("componentResized event from "

    + e.getComponent().getClass().getName());}

    public void componentShown(ComponentEvent e) {displayM essage("componentShown event from "

    + e.getComponent().getClass().getName());}

    }

    class ComponentPanel extends Panel ... {...ComponentPanel(ComponentEventDemo listener) {

    ... // a f ter creating the label and checkbox: label.addComponentListener(listener);checkbox.addComponentListener(listener);

    } ...

    } L p ComponentEvent M i m t ph ng th c c a s ki n cc thnh ph n c m t thng s n: i t nComponentEvent l p ComponentEvent nh ngh a m t ph ng th c hay dng, getComponent , tr v thnh ph n m pht ra s ki n.Vi t m t Container L istener

  • 8/9/2019 Creating GUI With JFC Swing -Minhhaivnnvn.minhhaifithou,

    45/65

    Gio trnh Java

    35559403.doc 45

    Nh ng s ki n c a Container c pht ra ngay sau khi m t thnh ph n c thmvo Container ho c chuy n i kh i Container .Cc ph ngth c, s k i nc a ContainerGiao di nContainerListener v l p m ph ng t ng ng,ContainerAdapter ch ahai ph ng th c:void componentAdded(ContainerEvent)

    c g i sau khi m t thnh ph n c thm vo Container.void componentRemoved(ContainerEvent) c g i sau khi m t thnh ph n c chuy n i kh i Container . V d v Handling Container Events public class ContainerEventDemo ... implements ContainerListener ... {

    ... // where initialization occu rs: buttonPanel = new Panel(); buttonPanel.addContainerListener(this);

    ... public void componentAdded(ContainerEvent e) {

    displayM essage(" added to ", e);}

    public void componentRemoved(ContainerEvent e) {displayM essage(" removed from ", e);

    }

    void displayM essage(String action, ContainerEvent e) {display.append(((Button)e.getChild()).getLabel()

    + " was"+ action+ e.getContainer().getClass().getName()+ "\n");

    } ...

    } L p ContainerEventM i ph ng th c c a Container Event c m t thng s n : i t ngContainerEvent. L pContainerEvent nh ngh a hai ph ng th c th ng dng sau:Component getChild() T r v thnh ph n c thm hay chuy n kh i Container trong s ki n ny .Container getContainer() T ar v Container sinh ra s ki n ny.Vi t m t Focus L istener Cc s ki n Focus c pht ra khi m t thnh ph n c ho c m t i s t p trung vn.Cc ph ngth c, s k i nc a FocusGaio di nFocusListener v l p m ph ng t ng ng ,FocusAdapter , ch a hai ph ng th c:void focusGained(FocusEvent)

    c g i sau khi thnh ph n c s t p trung .void focusLost(FocusEvent)

    c g i sau khi thnh ph n m t s t p trung.

  • 8/9/2019 Creating GUI With JFC Swing -Minhhaivnnvn.minhhaifithou,

    46/65

    Gio trnh Java

    35559403.doc 46

    V d v Handling Focus Events public class FocusEventDemo ... implements FocusListener ... {

    ... // where initialization occu rs window = new FocusWindow(this);

    ... public void focusGained(FocusEvent e) {

    displayM essage("Focus gained", e);} public void focusLost(FocusEvent e) {

    displayM essage("Focus lost", e);}

    void displayM essage(String prefix, FocusEvent e) {display.append(prefix

    + ": "+ e.getSource() //XXX+ "\n");

    } ...}

    class FocusWindow extends Frame {... public FocusWindow(FocusListener listener) {

    super("Focus Demo Window");this.addFocusListener(listener);...Label label = new Label("A Label");label.addFocusListener(listener);...Choice choice = new Choice();...choice.addFocusListener(listener);...Button button = new Button("A Button"); button.addFocusListener(listener);...List list = new List();...list.addFocusListener(listener);

    } } L p FocusEventM i ph ng th c Focus Event c m t thng s n : i t ngFocusEvent. L pFocusEvent nh ngh a m t ph ng th c,isTemporary, tr v gi trT rue khi ski n m t s t p trung l t m th i.

  • 8/9/2019 Creating GUI With JFC Swing -Minhhaivnnvn.minhhaifithou,

    47/65

    Gio trnh Java

    35559403.doc 47

    M i thng bo thng th ng m b n g i t i i t ngFocusEvent lgetComponent ( c nh ngh a trongComponentEvent), n tr v thnh ph n gyra s ki n ny.Vi t m t ItemL istener Cc s ki n c a Item c pht ra khi th c thi giao di nItemSelectable.Cc ph ngth c, s k i nc a ItemGiao di nItemListener vh c m t ph ng th c, v v y n khng c l p m ph ngt ng ng:void itemStateChanged(ItemEvent)

    c g i sau khi thay i tr ng thi c a thnh ph n.V d v Handling Item Events public void itemStateChanged(ItemEvent e) {

    if (e.getStateChange() == ItemEvent.SELECT ED) {label.setVisible(true);

    } else {label.setVisible(false);

    } } L p ItemEventM i ph ng th c c a Item event c m t thng s n: i t ngItemEvent. L pItemEvent nh ngh a cc ph ng th c sau:Ob ject getItem() T r v Item c t p trung trong s ki n ny .ItemSelectable getItemSelectable() T ar v thnh ph n pht ra s ki n .int getStateChange() tr v tr ng thi m i c a Item. L pItemEvent nh ngh a hai tr ng thi:SELECTED v DESELECTED.Vi t m tK ey L istener

    oc pht ra khi ng i s d ng nh phm. c bi t Key events pht ra b i i t ngm dang c t p trung khi ng i dng nh n ho c nh phm . Cc ph ngth c s k i nc aK ey Giao di nKeyListener v l p m ph ng t ng ng,KeyAdapter , ch a ba ph ngth c:void keyTyped(KeyEvent)

    oc g i sau khi phm oc nh.void keyPressed(KeyEvent)

    c go sau khi m t phm c n.void keyReleased(KeyEvent)

    c g i sau khi m t phm c nh .V d v Handling K ey Events public class KeyEventDemo ... implements KeyListener ... {

    ... // where initialization occu rs: typingArea = newT extField(20);typingArea.addKeyListener(this);

    .../** Handle the key typed event from the text field. */ public void keyT yped(KeyEvent e) {

    displayInfo(e, "KEYT YPED: ");

  • 8/9/2019 Creating GUI With JFC Swing -Minhhaivnnvn.minhhaifithou,

    48/65

    Gio trnh Java

    35559403.doc 48

    }

    /** Handle the key pressed event from the text field. */ public void keyPressed(KeyEvent e) {

    displayInfo(e, "KEY PRESSED: ");}

    /** Handle the key released event from the text field. */ public void keyReleased(KeyEvent e) {displayInfo(e, "KEY RELEASED: ");

    } ... protected void displayInfo(KeyEvent e, String s){

    ...char c = e.getKeyChar();int keyCode = e.getKeyCode();int modifiers = e.getM odifiers();...tmpString = KeyEvent.getKeyM odifiersT ext(modifiers);

    ... // display in f ormation abou t the Key E vent... }

    } L pKeyEventM i ph ng th c Key Event c m t thng s n : i t ngKeyEvent. L pKeyEvent nh ngh anh ng ph ng th c th ng dng sau :int getKeyChar() void setKeyChar(char) Nh n ho c xc l p k t lin quan v i s ki n ny .int getKeyCode() void setKeyCode(int) nh n ho c xc l p m c a phm lin quan v i s ki n ny.void setModifiers(int) xc l p t ng thi c a phm lin quan t i s ki n nyint getModifiers() T v tr ng thi c a phm trong s ki n ny.Vi t m t Mouse L istener Cc s ki n c pht ra khi ng i s d ng dng chu t tc ng n m t thnh ph nCc ph ngth c, s k i nc a MouseGiao di nMouseListener v l p m ph ng t ng ng,MouseAdapter , ch a ba ph ng th c:void mouseClicked(MouseEvent)

    c g i sau nkhi ng i s d ng kch ho t chu t vo m t thnh ph n .void mouseEntered(MouseEvent)

    c g i sau khi con tr chu t n m trong a ph n c a thnh ph n .void mouseExited(MouseEvent)

    c g i sau khi con tr chu t ra kh i a ph n c a thnh ph n .void mousePressed(MouseEvent)

    c g i sau khi con chu t c n trn a ph n c a thnh ph n.

  • 8/9/2019 Creating GUI With JFC Swing -Minhhaivnnvn.minhhaifithou,

    49/65

    Gio trnh Java

    35559403.doc 49

    void mouseReleased(MouseEvent) c g i sau khi con chu t c nh trn a ph n c a thnh ph n .

    V d v Handling Mouse Events public classM ouseEventDemo ... implementsM ouseListener {

    ... // where initialization occu rs: //Register for mouse events on blankArea and applet (panel). blankArea.addM ouseListener(this);addM ouseListener(this);...

    public void mousePressed(M ouseEvent e) {saySomething("M ouse button press", e);

    }

    public void mouseReleased(M ouseEvent e) {saySomething("M ouse button release", e);

    }

    public void mouseEntered(M ouseEvent e) {saySomething("Cursor enter", e);}

    public void mouseExited(M ouseEvent e) {saySomething("Cursor exit", e);

    }

    public void mouseClicked(M ouseEvent e) {saySomething("M ouse button click", e);

    }

    void saySomething(String eventDescription,M ouseEvent e) {textArea.append(eventDescription + " detected on "

    + e.getComponent().getClass().getName()+ ".\n");

    textArea.setCaretPosition(maxInt); //scroll to bottom}

    } L pMouseEventM i ph ng th cM ouse Event c m t thng s n: i t ngMouseEvent. L pMouseEvent nh ngh a cc ph ng th c th ng dng sau:int getClickCount() tr v s l n nh n lin ti p c a ng i s d ng.int getX() int getY() Point getPoint() T r v v tr c a con tr tr chu t, v tr ny ph thu c vo thnh ph n.boolean isPopupTrigger() tr v gi trT rue khi s ki n ny lm xu t hi n PopupM enu.Vi t m t Mouse Motion L istener

  • 8/9/2019 Creating GUI With JFC Swing -Minhhaivnnvn.minhhaifithou,

    50/65

    Gio trnh Java

    35559403.doc 50

    Cc s ki nM ouse motion pht ra ki ng i s d ng dng chu t di chuy n trn mnhnh.Cc ph ngth c, s k i nc a Mouse Motion Giao di n MouseMotionListener v l p m ph ng t ng ng,MouseMotionAdapter , ch a hai ph ng th c:void mouseDragged(MouseEvent)

    c g i sau khi ng i s d ng di chuy n chu t trong khi chu t ang c nh n .void mouseMoved(MouseEvent) c g i sau khi ng i s d ng di chuy n chu t khi con chu t ch a b nh n . V d v Handling Mouse Motion Events... // where initialization occu rs:

    M yListener myListener = newM yListener();addM ouseListener(myListener);addM ouseM otionListener(myListener);

    ...classM yListener extendsM ouseAdapter

    implementsM ouseM otionListener { public void mousePressed(M ouseEvent e) {

    int x = e.getX();int y = e.getY();currentRect = new Rectangle(x, y, 0, 0);repaint();

    }

    public void mouseDragged(M ouseEvent e) {updateSize(e);

    }

    public void mouseM oved(M ouseEvent e) {//Do nothing.

    }

    public void mouseReleased(M ouseEvent e) {updateSize(e);

    }

    void updateSize(M ouseEvent e) {int x = e.getX();int y = e.getY();currentRect.setSize(x - currentRect.x,

    y - currentRect.y);repaint();

    } } Cc ph ngth c, s k i n c s d ng b i Mouse-Motion L istenersM i ph ng th cM ouse M otion Event c m t thng s n , v n khng c g i lMouseMotionEvent! T hay vo , ph ng th cM ouse M otion Event s d ng it ngMouseEvent.Vi t m t TextListener

  • 8/9/2019 Creating GUI With JFC Swing -Minhhaivnnvn.minhhaifithou,

    51/65

    Gio trnh Java

    35559403.doc 51

    Cc s ki nT ext tr v sau khi chu i trong thnh ph nT ext c s thay i .Cc ph ngth c, s k i nc a TextGiao di nTextListener ch c m t ph ng th c nn khng c l p m ph ng t ng

    ng:void textValueChanged(TextEvent)

    c g i sau khi chu i trong thnh ph nT ext thay i .Examplesof Handling Text Events public classT extEventDemo ... {T extField textField;

    T extArea textArea;T extArea displayArea;...

    // where initialization occu rs: textField = newT extField(20);...textField.addT extListener(newM yT extListener("T ext Field"));

    textArea = newT extArea(5, 20);textArea.addT extListener(newM yT extListener("T ext Area"));...

    }

    classM yT extListener implementsT extListener {String preface;

    publicM yT extListener(String source) { preface = source

    + " text value changed.\n"+ " First 10 characters: \"";

    }

    public void textValueChanged(T extEvent e) {T extComponent tc = (T extComponent)e.getSource();String s = tc.getT ext();... // tr u ncate s to 10 characters...

    displayArea.append(preface + s + "\"\n");...

    } } ...

    } L p TextEventM i ph ng th cT ext Event c m t thng s n : i t ngTextEvent. L pTextEvent nh ngh a m t ph ng th c. Ph ng th cgetSource m TextEvent th a k t EventOb ject, b n c th nh n c thnh ph nT ext lin quan n s ki nny v g i thng i p cho n.Vi t m t Window L istener

  • 8/9/2019 Creating GUI With JFC Swing -Minhhaivnnvn.minhhaifithou,

    52/65

    Gio trnh Java

    35559403.doc 52

    Cc s ki n c a Window c pht ra sau khiWindowm , ng, thu nh , phng to,ho t ng v khng ho t ng. Cc ph ngth c, s k i nc a WindowGiao di nWindowListener v l p m ph ng t ng ng,WindowAdapter , ch a cc ph ng th c sau:void windowOpened(WindowEvent)

    c g i au khi Window c m l n u.void windowClosing(WindowEvent) c g i sau khi ng i s d ng ng Window .void windowClosed(WindowEvent)

    c g i sau khi Window ng l i .void windowIconified(WindowEvent) void windowDeiconified(WindowEvent)

    c g i sau khi Window phng to hay thu nh .void windowActivated(WindowEvent) void windowDeactivated(WindowEvent)

    c g i sau khi Window ho t ng hay khng ho t ng .V d v Handling Window Events public class WindowEventDemo ... implements WindowListener {... // where initialization occu rs:

    //Create but don't show window.window = new Frame("Window Event Window");window.addWindowListener(this);window.add("Center",

    new Label("T he applet listens to this window"" for window events."));

    window.pack();}

    public void windowClosing(WindowEvent e) {window.setVisible(false);

    displayM essage("Window closing", e);}

    public void windowClosed(WindowEvent e) {displayM essage("Window closed", e);

    }

    public void windowOpened(WindowEvent e) {displayM essage("Window opened", e);

    }

    public void windowIconified(WindowEvent e) {displayM essage("Window iconified", e);

    }

    public void windowDeiconified(WindowEvent e) {displayM essage("Window deiconified", e);

    }

  • 8/9/2019 Creating GUI With JFC Swing -Minhhaivnnvn.minhhaifithou,

    53/65

    Gio trnh Java

    355