Home

Interface Graphique en Java 1.6 Événements Sébastien Paumier

image

Contents

1. Des listeners personnalis s e tape 3 cr er un bouton et mettre un listener dessus final SpecialButton b new SpecialButton Please perform a popup color change b addRedForegroundListener new RedForegroundListener Override public void redForegroundSet RedForegroundEvent event JOptionPane showMessageDialog Component event getSource The button is now red Previous color was n tevent getPreviousColor e tape 4 savourer le plus beau et utile Ln x g i The button is now red Previous color was li S te ner du mon d O java awt Color r 0 9 255 b 0 paumier univ mlv fr 11 crire de beaux listeners e conseil n 1 si le listener ne sert que sur un seul composant utiliser une classe anonyme elles ont t cr es dans ce but final SpecialButton b new SpeciaLEe form a popup color change b addRedForegroundListene new ee eee Override public void redForegroundSet RedForegroundEvent event JOptionPane showMessageDialog Component event getSource The button is now red Previous color was n tevent getPreviousColor paumier univ mlv fr 12 crire de beaux listeners e le listener peut acc der aux champs de la classe ainsi qu aux variables locales finales public class Accessibility int n SuppressWarnings serial publi Hoid main String args final JFrame f new eee oe ay
2. Interface Graphique en Java 1 6 v nements S bastien Paumier paumier univ mlv fr Illustrations provenant du site http tux crystalxp net 1 L EventDispatchThread e alias la thread Swing thread qui pompe et traite les d v nements d une queue d v nements e les v nements trait s viennent du syst me fermeture de l application iconification d une fen tre rafra chissement d une zone qui redevient visible etc de l utilisateur souris clavier de l application t ches p riodiques etc paumier univ mlv fr 2 L EventDispatchThread e les v nements sont dispatches aux objets concern s e exemple qui est concern par un clic Swing inspecte l arborescence de composants pour trouver qui contient le clic de facon r cursive en tenant compte des positions de chacun sur le composant concern la VM ex cute processMouseEvent afin d ex cuter tous les bouts de code associ s cet v nement paumier univ mlv fr Les listeners e pour r agir a des v nements on utilise des listeners ventuellement plusieurs pour un m me objet a addActionListener new ActionListener Override public void actionPerformed ActionEvent e myModel addElement click on button A list ensureIndexIsVisible myModel getSize 1 te a addActionListener new ActionListener Override public void actionPerformed ActionEvent e myModel addElement ano
3. public BadListener JPanel p al beurk i i oe 1 on pourrait changer Override E le texte ublic void actionPerformed ActionEvent e j AbstractButton a 2 on pourrait vouloir if b getText equals Red I p setBackground Color RED d autres couleurs else if b getText equals Blue D seeBackground Color ELVE paumier univ mlv fr 17 e le m me en propre public class GoodListener implements ActionListener private final JPanel p private final Color c Public Goodlistener JPanel p Color this p p this c c Override Public void actionPerformed ActionEvent e p setBackground c paumier univ mlv fr Ecrire de beaux listeners p listener facilement param trable 18 Les v nements souris e 3 types d v nements donc 3 listeners MouseListener clic pression rel chement entr e sortie de la zone d un composant MouseMotionListener d placement de la souris MouseWheelListener gestion de la molette e attention on ne sait pas dans quel ordre mouseReleased et mouseClicked seront invoquees paumier univ mlv fr 19 Les v nements souris avec mouseEntered mouseExited on met en vidence le label survol en changeant sa couleur de fond mise jour du A compteur avec a __ B Mouse Demo io x mouseClicked 3 click counter 0 screen mouse coordinates 690 355 frame mouse coordinates 130
4. s c get Calendar SECOND try EventQueue invokeLater new Runnable Override public void run f setTitle time Thread sleep 1000 catch InterruptedException e throw new AssertionError e should not occur paumier univ mlv fr 29 EventQueue invoke EventQueue invokeAndWait Runnable r m me mode d emploi mais ne rend la main que quand l v nement a t trait e utile quand on veut tre s r qu une modification de l interface a t r alis e pour viter de faire exploser la queue d v nements avec trop de posts paumier univ mlv fr 30 e exemple qui explose la machine EventQueue invoke int i 0 while true final int v i EventQueue invokeLater new Runnable Override public void run Se Ra Ie ye j7 lt ee l setText The event queue is overloaded with v invokeLater calls e pourquoi parce qu il y a beaucoup trop d v nements g rer paumier univ mlv fr 31 EventQueue invoke e exemple qui n explose pas la machine ine ee 0 while true final int v itr try EventQueue invokeAndWait new Runnable Override public void run SCC Gy k m7 l setText The event queue is not overloaded with v invokeAndWait Fly catch InterruptedException e throw new AssertionError e should not occur catch
5. ShiftColorListener n this components components length components length this f f Override public void actionPerformed ActionEvent e if components null length lt 1 return Color c components 0 getForeground for int i Q0 i lt length 1l ittF components i setForeground components itl getForeground components length 1 setForeground c O Eee to E SECETICVE RSH EES golor SHIP nshiitarl g Hy paumier 15 crire de beaux listeners e conseil n 3 si le m me listener peut servir plusieurs fois ne pas h siter e si besoin utiliser getSource pour savoir d o vient l v nement ActionListener listener new ActionListener Override EA public void actionPerformed ActionEvent e E Reusable listens l x AbstractButton b AbstractButton e getSource Click on them to increase their values int n 1 Integer parseInt b getText a Di 225 JButton b new JButton 14 JCheckBox c new JCheckBox 3 JRadioButton r new JRadioButton 222 b addActionListener listener c addActionListener listener r addActionListener listener paumier univ mlv fr 16 crire de beaux listeners e conseil n 4 pas de test sur la source on passe ce qu il faut au listener public class BadListener implements ActionListener private final JPanel p
6. pas de suppression de listener pendant un fire paumier univ mlv fr 8 Des listeners personnalis s e comme fire n est ex cut e que par une seule thread un verrou bool en suffit protected boolean firingRedForegroundSet false protected void fireRedForegroundSet Color previous try firingRedForegroundSet true RedForegroundEvent e new RedForegroundEvent this listeners previous for RedForegroundListener 1 1 redForegroundSet e finally Very important to avoid being blocked because of an exception raised in a listener implementation firingRedForegroundSet false paumier univ mlv fr Des listeners personnalis s e redefinition du constructeur pour g rer l v nement qui nous int resse l on veut vraiment changer le comportement de JButton 4 public class SpecialButton extends JButton Color previcusctalor public SpecialButton String text super text previousColor getForeground addPropertyChangeListener foreground new PropertyChangeListener Override public void propertyChange PropertyChangeEvent evt af Color kev equals getForeground fireRedForegroundSet previousColor previousColor getForeground 7 D on coute les changements de couleur de texte si la couleur devient rouge on va paumier univ mlv fr alors lever notre propre v nement
7. 37 component mouse coordinates 5 7 17 Hormal Hormal Hormal Hormal 7 H l H l H l texte du label gris De cag Es avec mousePressed ij Normal Normal Normal Normal d gris avec mous eR e 1 ease d Normal Normal Normal Normal 20 paumier univ mlv fr Les v nements souris avec mouseDragged on change le curseur et on dessine sur le glass pane mise jour des coordonn es _ m eJ Mouse Demo a z iol x avec mouseMoved p click counter 0 screen mouse coordinates 690 355 frame mouse coordinates 130 37 component mouse coordinates ar dr Hormal Hormal Hormal A Hormal Hormal Hormal gr ce mouseReleased De zag on sait quand le drag est Normal Normal Normal Normal fini pour remettre le curseur par d faut Hormel Normal Hormal Hormal 21 paumier univ mlv fr Intermede e pour beaucoup de xxxListener il existe un xxxAdapter qui impl mente toutes les methodes en ne faisant rien e pratique car vite de s encombrer avec les m thodes dont on ne se sert pas JLabel l new JLabel HELLO l addMouseListener new MouseAdapter Override public void mouseClicked MouseEvent e doSomething paumier univ mlv fr 22 PropertyChangeListener e quand un composant modifie une de ses propri t s couleur opacit etc il pr vient ceux que a int resse grace aux PropertyChangeListener public class SpecialButton extends JButton public SpecialButton
8. InvocationTargetException e When a Runnable raises an exception in the EDT it is wrapped into an InvocationTargetException so that we must unwrap it in the current thread Throwable cause e getCause if cause instanceof RuntimeException throw RuntimeException cause if cause instanceof Error throw Error cause throw new UndeclaredThrowableException cause e pourquoi un seul v nement post a la fois paumier univ mlv fr 32 Le Timer e autre facon d ex cuter du code dans la thread Swing Timer int delay ActionListener toDo bien prendre le Timer de javax swing e version timer de notre horloge final Calendar c Calendar getInstance new Timer 1000 new ActionListener Override public void actionPerformed ActionEvent e c setTimeInMillis System currentTimeMillis String time Cge Calendar OUR OF DAY ENS PES get Calendar MINUTA EME c get Calendar SECOND No need to use invoke because we are in the event dispatch thread F setTitle time Vestarce paumier univ mlv fr 33 Le rafraichissement e repaint est threadsafe elle poste un v nement on peut donc l utiliser m me en dehors de la thread Swing m me chose pour validate et revalidate e les PaintEvent g n r s par repaint sont coalescents s il y en a deja un dans la queue d v nements l EDT n en reposte pa
9. String text super text addPropertyChangeListener foreground new PropertyChangeListener Override public void propertyChange PropertyChangeEvent evt if Color RED equals getForeground fireRedForegroundset De on sera pr venu des changements de couleur de texte paumier univ mlv fr 23 PropertyChangeListener e une propri t est dite contrainte quand elle pr vient avant de changer afin que les objets l coute puissent mettre leur v to e exemple un label qui demande la permission avant de changer son texte final JLabel firstname new JLabel Override public void setText String text try catch PropertyVetoException e super setText e getMessage return super setText text fireVetoableChange text getText text paumier univ mlv fr S The firstname a etoable propert f o x Father s veto Mother s veto Rachel Cindy Diana Rachel Pricilla Diana Raymonde Pricilla Clara Raymonde Liang Clara Elvira Liang Eira r Megane Enter your proposition Clara EE Validate Mother Clara HO Way 24 PropertyChangeListener e pour mettre son v to il faut s enregistrer avec addVetoableChangeListener et lever une PropertyVetoException quand on en a envie firstname addVetoableChangeListener new VetoableChangeListener Override public void vetoableChange Pro
10. am Scanner scanner new Scanner stream UTF 16LE We look for letter sequences scanner useDelimiter p javaLowerCase p javaUpperCase while scanner hasNext pu ublish scanner next int old getProgress b set Progress int stream getCounter 100 sizel Load text if old getProgress I ie we don t slow donn the progression won t be visible Thread sleep 1 stream close return null PASSEPARTOUT paumier univ mlv fr Le SwingWorker Override protected void process List lt String gt chunks The only thing we have to do here is to add each String to our list model String s chunks 1 for model addElement s Override protected void done b setEnabled true f setTitle SwingWorker demonstration e attention done est ex cut e quand doInBackground est finie pas quand tous les r sultats ont t trait s par process 41 paumier univ mlv fr Le SwingWorker e on d marre le SwingWorker avec execute e on ne se ressert pas d un SwingWorker on le recr e e si on veut r cup rer la valeur de retour de doInBackground utiliser la m thode get e attention get est bloquant ne pas l appeler depuis la thread Swing paumier univ mlv fr 42 Le SwingWorker e on peut tenir jour la progression avec setProgress int n avec n entre 0 et 100 e
11. e Override public void actionPerformed ActionEvent e access pa lity Mkt f setTitle Counter accessibility n EACeeConeent Pane ad b setsize 300 300 SetDetaultClose0peration args Length 0 7 JFrame Herr ON CLOSE WindowConstants DISPOSE ON CLOSE f setVisible true paumier univ mlv crire de beaux listeners e pourquoi final e parce qu l ex cution du code du listener on est sorti de la fonction main ou tait d clar e final JFrame f new JFrame Counter 0 JButton b new JButton Click to increase the frame title counter final Accessibility accessibility new Accessibility b addActionListener pew LOL ener Que oe public void actionPerformed ActionEvent e access Homi ey ait f Setrit le Gomnter taccessibility om code qui sera ex cut on ne sait pas quand dans la thread Swing paumier univ mlv fr 14 crire de beaux listeners e conseil n 2 si le listener doit acc der beaucoup d infos cr er une classe public class ShiftColorListener implements ActionListener private final JComponent components private final JFrame f private final int length private int nShifts public ShiftColorListener JFrame JComponent components if components null components length 0 throw new IllegalArgumentException Cannot use null or empty array in
12. e object must be the only one able to tell about changes protected void fireActionPerformed ActionEvent event for ActionListener l listeners l actionPerformed event paumier univ mlv fr Des listeners personnalis s e exemple un listener pour tre pr venu quand le texte d un bouton devient rouge e tape 1 d finir le listener et le type d v nement qu il doit g rer public interface RedForegroundListener public void redForegroundSet RedForegroundEvent event public class RedForegroundEvent extends EventObject private final Color previousColor public RedForegroundEvent Object source Color c super source this previousColor c public Color getPreviousColor return previousColor paumier univ ml Des listeners personnalis s e tape 2 fabriquer une version de JButton qui propose ce service e gestion des listeners public class SpecialButton extends JButton private final ArrayList lt RedForegroundListener gt listeners new ArrayList lt RedForegroundListener gt public void addRedForegroundListener RedForegroundListener 1 listeners add 1l public void removeRedForegroundListener RedForegroundListener 1 if firingRedForegroundset throw new IllegalStateException Cannot remove listeners while fire is using them lio cerera renove 1 protected boolean e false
13. eshing a component with paintimmediately all are exec cut o x 50 52 calls to paint omponent paumier univ mlv fr 37 Le SwingWorker e probleme que faire quand une thread doit faire beaucoup d op rations r p titives dans l interface invokeAndWait va ralentir la thread de calcul invokeLater risque de surcharger la queue d v nements e solution le SwingWorker qui permet de regrouper automatiquement des paquets d op rations paumier univ mlv fr 38 Le SwingWorker e principe on travaille dans la m thode doInBackground on poste des objets repr sentant des resultats grace a la m thode publish r guli rement la thread Swing ex cute la m thode process en lui passant tous les objets r sultats qui n ont pas encore t trait s libre alors au programmeur de faire ses rafraichissements en fonction des resultats paumier univ mlv fr 39 Le SwingWorker e exemple chargement des mots d un texte dans une liste We have nothing special to return so we use the special type Void which is an object version of void String is the type of our intermediate results SwingWorker lt Void String gt worker new SwingWorker lt Void String gt Override protected Void doInBackground throws Exception URL url SwingWorkerDemo class getResource 80jours txt long sizelInBytes FileUtilities getSize url CounterInputStream stream new CounterInputStream url openStre
14. exemple gestion de la progression SwingWorker lt Void String gt worker new SwingWorker lt Void String gt worker addPropertyChangeListener new PropertyChangeListener Override public void propertyChange PropertyChangeEvent evt if progress equals evt getPropertyName f setTitle Integer evt getNewValue 3 r worker execute paumier univ mlv fr 43
15. pertyChangeEvent evt throws PropertyVetoException String s String evt getNewValue for Object o father getSelectedValues if s cguals String o throw new PropertyVetoException Father don t even think about s evt paumier univ mlv fr 25 L EventDispatchThread re e seule thread avoir le droit de modifier l interface e toute modification sur un composant graphique doit s effectuer dans cette thread pas de probl me quand on est dans le code d un listener on est dans la bonne thread que faire quand ce n est pas le cas paumier univ mlv fr 26 e exemple main veut mettre l heure dans la barre de titre de l application A raw handmade clock e comment effectuer frame setTitle depuis une autre thread e r ponse EventQueue invoke paumier univ mlv fr 27 EventQueue invoke EventQueue invokeLater Runnable r cr e un v nement charg d ex cuter r run le poste dans la thread Swing rend la main la thread courante e un peu lourd crire mais c est un mal n cessaire paumier univ mlv fr 28 EventQueue invoke e voici notre horloge We go on executing main s code in the main thread that is NOT the event dispatch thread Calendar c Calendar getiInstance while true c setTimeInMillis System currentTimeMillis final string time o get Calendar nOr OF DAY s e get Calendar MINOC
16. s un nouveau afin de ne pas ralentir l application paumier univ mlv fr 34 Le rafra chissement e exemple un label personnalis qui met du temps se dessiner et qui compte les rafraichissements Override protected void paintComponent Graphics g if text null g drawString text 20 20 counterit g drawString countert call counter gt l ta tm u to paintConponent 20 45 7 We wait to simulate a long painting try Thread sleep 500 catch InterruptedException e e PrinkStack race paumier univ mlv fr 35 Le rafraichissement e si l on poste beaucoup de repaint int i 0 while true final int n i EventQueue invokeLater new Runnable Override public void run I setCapt ion nt l repaint try Thread sleep 100 catch InterruptedException e ec printotackbrace y e certains PaintEvent sont ignor s paumier univ mlv fr 164 37 calls to paintlomponent Refreshing a component with repaint some paintings are skipp ad e jo x 36 Le rafra chissement e mais si l on remplace repaint par paintImmediately qui s ex cute sans attendre EventQueue invokeLater new Runnable Override public void run l SetCaption at l paintimmediately l getBounds vie e tous les rafraichissements ont lieu et l application est plus lente Refr
17. ther action event on A list ensureIndexIsVisible myModel getSize 1 lolx Panel do you contain 71 237 true button A do you contain 72 265 false Panel do you contain 26 244 true button A do you contain 17 235 true another action event on lick on button button A do you contain 42 249 false Panel do you contain 45 250 true Panel do you contain 105 226 true button A do you contain 55 265 false Panel do you contain 26 239 true another action event on A lick on button A button A do you contain 28 216 true Panel do you contain 0 241 true paumier univ mlv fr Principe des listeners 1 les objets qui ont des choses dire proposent l ajout retrait de listeners JButton add removeActionListener JInternalFrame add removeInternalFrameListener etc e un listener est une interface proposant des m thodes sp cialis es ActionListener actionPerformed InternalFrameListener internalFrameClosing etc paumier univ mlv fr Principe des listeners 2 les objets qui veulent tre tenus au courant ajoutent un listener 3 quand il y a quelque chose a dire l objet source invoque la m thode appropri e de tous les listeners qu il conna t c est le travail de fire ArrayList lt ActionListener gt listeners new ArrayList lt ActionListener gt A fire method MUST be protected because the sourc

Download Pdf Manuals

image

Related Search

Related Contents

Philips HTS5700R/05 Home Theater System User Manual  Manuel d`utilisation  アクノナスター  b) BiColor model  Ices IBT-2  Honey Bee 2010/2011  Diamondback 06.DB SS OM Bicycle User Manual  

Copyright © All rights reserved.
Failed to retrieve file