Download præsentationen
Præsentation er lastning. Vent venligst
Offentliggjort afJacob Kjeldsen Redigeret for ca. et år siden
1
12 – GUI med Swing
2
2 NOEA2009Java-kursus – GUI med Swing Designer view Komponenter Frame Properties Inspector
3
3 NOEA2009Java-kursus – GUI med Swing Demo En simpel applikation der viser brug af komponenter og event handlere
4
4 NOEA2009Java-kursus – GUI med Swing Event-driven applications Ideen er meget simpel: –“user actions” bliver til “events” –events overføres en for en til applikationen, som processererer eventen vha. en eventhandler –Sådan programmeres de fleste GUI’er… GUI App
5
5 NOEA2009Java-kursus – GUI med Swing Event Model? Events bruges til håndtere interaktion med GUI komponenter, dvs. hvordan skal programmet f.eks håndtere tryk på en knap Tre vigtige elementer Event Source Event Listener/Handler Event Object
6
6 NOEA2009Java-kursus – GUI med Swing Event Source, Event Listener/Handler Event Source > Den GUI komponent der genererer hændelsen > Eksempel: button Event Listener/Handler > Modtager og håndterer events > Indeholder forretnings logik Ommer!! Kalder logik i forretningslaget! > Eksempel: Vis information til brugeren. Slå op i database. Beregn noget
7
7 NOEA2009Java-kursus – GUI med Swing Event Object Oprettes når event’et sker. Indeholder nødvendig information om hændelsen Event type som er opstået Kilde til event, f.eks minKnap Repræsenteret af en Event klasse
8
8 NOEA2009Java-kursus – GUI med Swing Event Listener registreres ved Event Source En listener registreres ved en kilde og venter derefter til et event opstår Når et event opstår > Event objekt oprettes af event source > Event objekt fyres af til de registrerede listeners (metode på event listener kaldes med et event objekt som parameter) Når listeneren modtager et event objekt fra kilden > Undersøg og behandl den event som er opstået.
9
9 NOEA2009Java-kursus – GUI med Swing Control Flow of Delegation Event Model
10
10 NOEA2009Java-kursus – GUI med Swing Observer pattern Also called Observable in some litterature Might also be a interface
11
11 NOEA2009Java-kursus – GUI med Swing Metoder på GUI komponenter til registrering Registrere en listener: void add Listener( Listener listenerObj) hvor > afhænger af komponenten >f.eks Key, Mouse, Focus, Component, Action mv. > En komponent kan have flere listeners registreret Afregistere en listener: void remove Listener( Listener listenerObj)
12
12 NOEA2009Java-kursus – GUI med Swing Event Classes Event Classes
13
13 NOEA2009Java-kursus – GUI med Swing Event klasser Arver fra EventObject klassen > java.util package AWTEvent klassen > Subklasse til EventObject > Defineret i java.awt package > Rod for alle AWT-baserede events > Subklasser følger denne navne konvention: Event
14
14 NOEA2009Java-kursus – GUI med Swing Event klasser
15
15 NOEA2009Java-kursus – GUI med Swing Event Listeners Klasser som implementerer Listener interfaces Typiske Listener interfaces:
16
16 NOEA2009Java-kursus – GUI med Swing ActionListener Metode ActionListener er et interface, som indeholder een metode
17
17 NOEA2009Java-kursus – GUI med Swing MouseListener Metoder
18
18 NOEA2009Java-kursus – GUI med Swing MouseMotionListener Metoder
19
19 NOEA2009Java-kursus – GUI med Swing WindowListener Metoder
20
20 NOEA2009Java-kursus – GUI med Swing Trin til oprette GUI applikation med event handling 1.Oprette GUI klasse > Hvordan skal applikationen se ud. 2.Oprette Event Listener klasse (en klasse som implementere det passende listener interface) > Override alle metoder i interfacet > Dvs. implementer de metoder der betyder noget og måske tomme implementeringer for dem, der ikke betyder noget 3.Register listener objektet komponenten > Objektet er en instans af listener klassen i step 2 > Brug add Listener metoden på komponenten
21
21 NOEA2009Java-kursus – GUI med Swing Mouse Events Eksempel (page #1) import java.awt.*; import java.awt.event.*; public class MouseEventsDemo extends Frame implements MouseListener, MouseMotionListener { TextField tf; public MouseEventsDemo(String title){ super(title); tf = new TextField(60); // Register event listener to the event source addMouseListener(this); } //continued...
22
22 NOEA2009Java-kursus – GUI med Swing Mouse Events Eksempel (page #2) // Displays GUI public void launchFrame() { /* Add components to the frame */ add(tf, BorderLayout.SOUTH); setSize(300,300); setVisible(true); } // Implement methods of event listener interface public void mouseClicked(MouseEvent me) { String msg = "Mouse clicked."; tf.setText(msg); } //continued...
23
23 NOEA2009Java-kursus – GUI med Swing Mouse Events Eksempel (page #3) public void mouseEntered(MouseEvent me) { String msg = "Mouse entered component."; tf.setText(msg); } public void mouseExited(MouseEvent me) { String msg = "Mouse exited component."; tf.setText(msg); } public void mousePressed(MouseEvent me) { String msg = "Mouse pressed."; tf.setText(msg); } //continued...
24
24 NOEA2009Java-kursus – GUI med Swing Mouse Events Eksempel (page #4) public void mouseReleased(MouseEvent me) { String msg = "Mouse released."; tf.setText(msg); } public void mouseDragged(MouseEvent me) { String msg = "Mouse dragged at " + me.getX() + "," + me.getY(); tf.setText(msg); } //continued...
25
25 NOEA2009Java-kursus – GUI med Swing Mouse Events Eksempel (page #5) public void mouseMoved(MouseEvent me) { String msg = "Mouse moved at " + me.getX() + "," + me.getY(); tf.setText(msg); } // Main method public static void main(String args[]) { MouseEventsDemo med = new MouseEventsDemo("Mouse Events Demo"); med.launchFrame(); }
26
26 NOEA2009Java-kursus – GUI med Swing Close Window Eksempel (page #1) import java.awt.*; import java.awt.event.*; class CloseFrame extends Frame implements WindowListener { Label label; CloseFrame(String title) { super(title); label = new Label("Close the frame."); this.addWindowListener(this); } //continued...
27
27 NOEA2009Java-kursus – GUI med Swing Close Window Eksempel (page #2) void launchFrame() { setSize(300,300); setVisible(true); } // Implement methods of listener interface public void windowActivated(WindowEvent e) { } public void windowClosed(WindowEvent e) { } public void windowClosing(WindowEvent e) { setVisible(false); System.exit(0); } //continued...
28
28 NOEA2009Java-kursus – GUI med Swing Close Window Eksempel (page #3) public void windowDeactivated(WindowEvent e) { } public void windowDeiconified(WindowEvent e) { } public void windowIconified(WindowEvent e) { } public void windowOpened(WindowEvent e) { } // Main method public static void main(String args[]) { CloseFrame cf = new CloseFrame("Close Window Example"); cf.launchFrame(); }
29
29 NOEA2009Java-kursus – GUI med Swing Adapter klasser Hvorfor adapter klasser? > Ellers implementere en masse tomme metoder i et interface > Det er kun nogle af metoderne i event listener interfacet, der interessante i situationen Adapter klasser > Indbygget i Java > Implementer alle metoder i event listener interfaces med mere end en metode > Implementerer tomme metoder
30
30 NOEA2009Java-kursus – GUI med Swing Adapter klasser: Close Window Eksempel import java.awt.*; import java.awt.event.*; class CloseFrame extends Frame{ Label label; CFListener w = new CFListener(this); CloseFrame(String title) { super(title); label = new Label("Close the frame."); this.addWindowListener(w); } // Irrelevant kode udeladt //continued...
31
31 NOEA2009Java-kursus – GUI med Swing Adapter klasser: Close Window Eksempel class CFListener extends WindowAdapter { CloseFrame ref; CFListener( CloseFrame ref ){ this.ref = ref; } public void windowClosing(WindowEvent e) { ref.dispose(); System.exit(1); }
32
32 NOEA2009Java-kursus – GUI med Swing Inner Classes Klasse der er erklæret indeni en anden klasse Hvorfor inner classes? > Gør programmer simplere > Specielt ved event handling > Forudsætter høj kobling
33
33 NOEA2009Java-kursus – GUI med Swing Inner Classes: Close Window Eksempel import java.awt.*; import java.awt.event.*; class CloseFrame extends Frame{ Label label; CloseFrame(String title) { super(title); label = new Label("Close the frame."); this.addWindowListener(new CFListener()); } //continued...
34
34 NOEA2009Java-kursus – GUI med Swing Inner Classes: Close Window Eksempel void launchFrame() { setSize(300,300); setVisible(true); } class CFListener extends WindowAdapter { public void windowClosing(WindowEvent e) { dispose(); System.exit(1); } //continued...
35
35 NOEA2009Java-kursus – GUI med Swing Inner Classes: Close Window Eksempel public static void main(String args[]) { CloseFrame cf = new CloseFrame("Close Window Example"); cf.launchFrame(); }
36
36 NOEA2009Java-kursus – GUI med Swing Anonyme Inner Classes Inner classes uden navn Hvorfor anonyme inner classes? > Simplifisere koden yderligere > Specielt i event handling
37
37 NOEA2009Java-kursus – GUI med Swing Anonyme Inner Classes: Close Window Eksempel import java.awt.*;import java.awt.event.*; class CloseFrame extends Frame{ Label label; CloseFrame(String title) { super(title); label = new Label("Close the frame."); this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ dispose(); System.exit(1); } }); } Dette er den normale måde at gøre på i Java GUI programmering
Lignende præsentationer
© 2024 SlidePlayer.dk Inc.
All rights reserved.