Intercettare gli eventi del Mouse e della tastiera Originals of Slides and Source Code for Examples: http://courses.corese...
Agenda <ul><li>Strategie generali di gestione degli eventi </li></ul><ul><li>Gestire gli eventi con listeners separati </l...
Strategia Generale <ul><li>Determinare quale tipo di listener ci interessa </li></ul><ul><ul><li>11 tipi standard di liste...
Gestire gli eventi con un Listener separato: caso semplice <ul><li>Il Listener non ha bisogno di chiamare nessun metodo de...
Listener Separato: Caso Semplice (Continua) <ul><li>import java.awt.event.*; </li></ul><ul><li>public class ClickListener ...
Generalizzando il caso semplice <ul><li>Come implementare un ClickListener per disegnare un cerchio ogni volta che il mous...
Gestire gli Eventi con un listener Separato: Caso Generale <ul><li>import java.applet.Applet; </li></ul><ul><li>import jav...
Gestire gli Eventi con un listener Separato: Caso Generale (Continua) <ul><li>import java.applet.Applet; </li></ul><ul><li...
Gestire gli Eventi con un listener Separato: Caso Generale (Risultato)
Caso 2: Implementare un’iterfaccia Listener <ul><li>import java.applet.Applet; </li></ul><ul><li>import java.awt.*; </li><...
Implementare un’iterfaccia Listener (Continua) <ul><li>public void  mouseEntered (MouseEvent event) {} </li></ul><ul><li>p...
Adapters vs. Interfacce:  Errori di Signature dei metodi <ul><li>Cosa succede se si sbaglia la signature del metodo? </li>...
Esempio di @Override <ul><li>public class CircleDrawer1 extends Applet { </li></ul><ul><li>@Override </li></ul><ul><li>pub...
Caso 3: Named Inner Classes <ul><li>import java.applet.Applet; </li></ul><ul><li>import java.awt.*; </li></ul><ul><li>impo...
Named Inner Classes (Continua) <ul><li>Nota: ancora parte della classe della slide precedente </li></ul><ul><li>private cl...
Caso 4: Inner Classes Anonime <ul><li>public class CircleDrawer4 extends Applet { </li></ul><ul><li>public void init() { <...
Strategie di gestione eventi:  Pro e Contro <ul><li>Listener Separato </li></ul><ul><ul><li>Vantaggi </li></ul></ul><ul><u...
Strategie di gestione eventi:  Pro e Contro (Continua) <ul><li>Named inner class </li></ul><ul><ul><li>Vantaggi </li></ul>...
Listener di Eventi Standard AWT (Sommario)
Listener di Eventi Standard AWT (Dettagli) <ul><li>ActionListener </li></ul><ul><ul><li>Gestisce i bottoni e qualche altra...
Listener di Eventi Standard AWT (Dettagli) <ul><li>ContainerListener </li></ul><ul><ul><li>Invocato quando una window aggi...
Listener di Eventi Standard AWT (Dettagli) <ul><li>ItemListener </li></ul><ul><ul><li>Gestisce la selezione in liste, chec...
Listener di Eventi Standard AWT (Dettagli) <ul><li>MouseListener </li></ul><ul><ul><li>Per gestire gli eventi base del mou...
Listener di Eventi Standard AWT (Dettagli) <ul><li>TextListener </li></ul><ul><ul><li>Gestisce gli eventi di Textfields e ...
Eventi del Mouse: Dettagli <ul><li>MouseListener e MouseMotionListener condividono i tipi di eventi </li></ul><ul><li>Loca...
Esempio semplice: Spelling-Correcting Textfield <ul><li>KeyListener corregge lo spelling durante la scrittura </li></ul><u...
Esempio: Semplice Lavagna <ul><li>import java.applet.Applet; </li></ul><ul><li>import java.awt.*; </li></ul><ul><li>import...
Esempio: Semplice Lavagna <ul><li>private class PositionRecorder  extends MouseAdapter  { </li></ul><ul><li>public void  m...
Esempio: Semplice Lavagna <ul><li>... </li></ul><ul><li>private class LineDrawer  extends MouseMotionAdapter  { </li></ul>...
Esempio: Semplice Lavagna
Lavagna: Aggiungere gli eventi della tastiera <ul><li>import java.applet.Applet; </li></ul><ul><li>import java.awt.*; </li...
Lavagna (Continua) <ul><li>... </li></ul><ul><li>private class CharDrawer  extends KeyAdapter  { </li></ul><ul><li>// When...
Lavagna (Results)
Sommario <ul><li>Stategie generali </li></ul><ul><ul><li>Determinare il tipo di listener da utilizzare </li></ul></ul><ul>...
Upcoming SlideShare
Loading in …5
×

Intercettare gli eventi di mouse e tastiera

7,548 views

Published on

Intercettare gli eventi di muose e tastiera in Java

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
7,548
On SlideShare
0
From Embeds
0
Number of Embeds
208
Actions
Shares
0
Downloads
75
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Intercettare gli eventi di mouse e tastiera

  1. 1. Intercettare gli eventi del Mouse e della tastiera Originals of Slides and Source Code for Examples: http://courses.coreservlets.com/Course-Materials/java5.html Traduzione a cura di Javastaff.com
  2. 2. Agenda <ul><li>Strategie generali di gestione degli eventi </li></ul><ul><li>Gestire gli eventi con listeners separati </li></ul><ul><li>Gestire gli eventi con le interfacce </li></ul><ul><li>Gestire gli eventi con le inner classes </li></ul><ul><li>Gestire gli eventi con le inner classes anonime </li></ul><ul><li>I tipi standard di listener AWT </li></ul><ul><li>Finezze con gli eventi del mouse </li></ul><ul><li>Esempi </li></ul>
  3. 3. Strategia Generale <ul><li>Determinare quale tipo di listener ci interessa </li></ul><ul><ul><li>11 tipi standard di listener in AWT descritti nelle prossime slides: </li></ul></ul><ul><ul><ul><li>ActionListener, AdjustmentListener, ComponentListener, ContainerListener, FocusListener, ItemListener, KeyListener, MouseListener, MouseMotionListener, TextListener, WindowListener </li></ul></ul></ul><ul><li>Definire una classe del tipo scelto </li></ul><ul><ul><li>Implement interface (KeyListener, MouseListener, etc.) </li></ul></ul><ul><ul><li>Extend class (KeyAdapter, MouseAdapter, etc.) </li></ul></ul><ul><li>Registrare un’istanza del vostro listener nella window </li></ul><ul><ul><li>w.add Xxx Listener(new MyListenerClass()); </li></ul></ul><ul><ul><ul><li>Es: addKeyListener, addMouseListener </li></ul></ul></ul>
  4. 4. Gestire gli eventi con un Listener separato: caso semplice <ul><li>Il Listener non ha bisogno di chiamare nessun metodo della window al quale è associata </li></ul><ul><li>import java.applet.Applet; </li></ul><ul><li>import java.awt.*; </li></ul><ul><li>public class ClickReporter extends Applet { </li></ul><ul><li>public void init() { </li></ul><ul><li>setBackground(Color.YELLOW); </li></ul><ul><li>addMouseListener(new ClickListener()); </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  5. 5. Listener Separato: Caso Semplice (Continua) <ul><li>import java.awt.event.*; </li></ul><ul><li>public class ClickListener extends MouseAdapter { </li></ul><ul><li>public void mousePressed(MouseEvent event) { </li></ul><ul><li>System.out.println(&quot;Mouse pressed at (&quot; + </li></ul><ul><li>event.getX() + &quot;,&quot; + </li></ul><ul><li>event.getY() + &quot;).&quot;); </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  6. 6. Generalizzando il caso semplice <ul><li>Come implementare un ClickListener per disegnare un cerchio ogni volta che il mouse è cliccato? </li></ul><ul><li>Perchè non possiamo semplicemente chiamare getGraphics per ottenere un oggetto Graphics con il quale disegnare? </li></ul><ul><li>Soluzione Generale: </li></ul><ul><ul><li>Invocare event.getSource per ottenere un riferimento ad un componente window o GUI dal quale è originato l’evento </li></ul></ul><ul><ul><li>Eseguire un cast sul risultato ottenendo il tipo di interesse </li></ul></ul><ul><ul><li>Invocare i metodi di questo oggetto </li></ul></ul>
  7. 7. Gestire gli Eventi con un listener Separato: Caso Generale <ul><li>import java.applet.Applet; </li></ul><ul><li>import java.awt.*; </li></ul><ul><li>public class CircleDrawer1 extends Applet { </li></ul><ul><li>public void init() { </li></ul><ul><li>setForeground(Color.BLUE); </li></ul><ul><li>addMouseListener(new CircleListener()); </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  8. 8. Gestire gli Eventi con un listener Separato: Caso Generale (Continua) <ul><li>import java.applet.Applet; </li></ul><ul><li>import java.awt.*; </li></ul><ul><li>import java.awt.event.*; </li></ul><ul><li>public class CircleListener extends MouseAdapter { </li></ul><ul><li>private int radius = 25; </li></ul><ul><li>public void mousePressed(MouseEvent event) { </li></ul><ul><li>Applet app = (Applet)event.getSource(); </li></ul><ul><li>Graphics g = app .getGraphics(); </li></ul><ul><li>g.fillOval(event.getX()-radius, </li></ul><ul><li>event.getY()-radius, </li></ul><ul><li>2*radius, </li></ul><ul><li>2*radius); </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  9. 9. Gestire gli Eventi con un listener Separato: Caso Generale (Risultato)
  10. 10. Caso 2: Implementare un’iterfaccia Listener <ul><li>import java.applet.Applet; </li></ul><ul><li>import java.awt.*; </li></ul><ul><li>import java.awt.event.*; </li></ul><ul><li>public class CircleDrawer2 extends Applet </li></ul><ul><li>implements MouseListener { </li></ul><ul><li>private int radius = 25; </li></ul><ul><li>public void init() { </li></ul><ul><li>setForeground(Color.BLUE); </li></ul><ul><li>addMouseListener(this); </li></ul><ul><li>} </li></ul>
  11. 11. Implementare un’iterfaccia Listener (Continua) <ul><li>public void mouseEntered (MouseEvent event) {} </li></ul><ul><li>public void mouseExited (MouseEvent event) {} </li></ul><ul><li>public void mouseReleased (MouseEvent event) {} </li></ul><ul><li>public void mouseClicked (MouseEvent event) {} </li></ul><ul><li>public void mousePressed(MouseEvent event) { </li></ul><ul><li>Graphics g = getGraphics(); </li></ul><ul><li>g.fillOval(event.getX()-radius, </li></ul><ul><li>event.getY()-radius, </li></ul><ul><li>2*radius, </li></ul><ul><li>2*radius); </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  12. 12. Adapters vs. Interfacce: Errori di Signature dei metodi <ul><li>Cosa succede se si sbaglia la signature del metodo? </li></ul><ul><ul><li>public void mouse p ressed(MouseEvent e) </li></ul></ul><ul><ul><li>public void mousePressed () </li></ul></ul><ul><li>Interfacce </li></ul><ul><ul><li>Errori a tempo di compilazione </li></ul></ul><ul><li>Adapters </li></ul><ul><ul><li>Nessun errore di compilazione ma non accade nulla a run time quando si preme il mouse </li></ul></ul><ul><li>Soluzioen per gli adapters: le annotation @Override </li></ul><ul><ul><li>Ogni volta che pensate di stare eseguendo un override di un metodo, scrivete &quot;@Override&quot; sulla linea precedente l’inizio di tale metodo. </li></ul></ul><ul><ul><ul><li>Se il metodo non sta effettivamente eseguendo l’override, otterrete un errore di compilazione. </li></ul></ul></ul>
  13. 13. Esempio di @Override <ul><li>public class CircleDrawer1 extends Applet { </li></ul><ul><li>@Override </li></ul><ul><li>public void init() { </li></ul><ul><li>setForeground(Color.BLUE); </li></ul><ul><li>addMouseListener(new CircleListener()); </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>public class CircleListener extends MouseAdapter { </li></ul><ul><li>private int radius = 25; </li></ul><ul><li>@Override </li></ul><ul><li>public void mousePressed(MouseEvent event) { </li></ul><ul><li>Applet app = (Applet)event.getSource(); </li></ul><ul><li>Graphics g = app.getGraphics(); </li></ul><ul><li>g.fillOval(event.getX()-radius, </li></ul><ul><li>event.getY()-radius, </li></ul><ul><li>2*radius, </li></ul><ul><li>2*radius); </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  14. 14. Caso 3: Named Inner Classes <ul><li>import java.applet.Applet; </li></ul><ul><li>import java.awt.*; </li></ul><ul><li>import java.awt.event.*; </li></ul><ul><li>public class CircleDrawer3 extends Applet { </li></ul><ul><li>public void init() { </li></ul><ul><li>setForeground(Color.BLUE); </li></ul><ul><li>addMouseListener(new CircleListener()); </li></ul><ul><li>} </li></ul>
  15. 15. Named Inner Classes (Continua) <ul><li>Nota: ancora parte della classe della slide precedente </li></ul><ul><li>private class CircleListener </li></ul><ul><li>extends MouseAdapter { </li></ul><ul><li>private int radius = 25; </li></ul><ul><li>public void mousePressed(MouseEvent event) { </li></ul><ul><li>Graphics g = getGraphics(); </li></ul><ul><li>g.fillOval(event.getX()-radius, </li></ul><ul><li>event.getY()-radius, </li></ul><ul><li>2*radius, </li></ul><ul><li>2*radius); </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  16. 16. Caso 4: Inner Classes Anonime <ul><li>public class CircleDrawer4 extends Applet { </li></ul><ul><li>public void init() { </li></ul><ul><li>setForeground(Color.BLUE); </li></ul><ul><li>addMouseListener </li></ul><ul><li>( new MouseAdapter() { </li></ul><ul><li>private int radius = 25; </li></ul><ul><li>public void mousePressed(MouseEvent event) { </li></ul><ul><li>Graphics g = getGraphics(); </li></ul><ul><li>g.fillOval(event.getX()-radius, </li></ul><ul><li>event.getY()-radius, </li></ul><ul><li>2*radius, </li></ul><ul><li>2*radius); </li></ul><ul><li>} </li></ul><ul><li>} ); </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  17. 17. Strategie di gestione eventi: Pro e Contro <ul><li>Listener Separato </li></ul><ul><ul><li>Vantaggi </li></ul></ul><ul><ul><ul><li>Puo’ estendere un adapter ignorandone i metodi inutili </li></ul></ul></ul><ul><ul><ul><li>Classi separate sono più semplici da manutenere </li></ul></ul></ul><ul><ul><li>Svantaggi </li></ul></ul><ul><ul><ul><li>Necessita di passi extra per invocare metodi nella finestra principale </li></ul></ul></ul><ul><li>Window principale che implementa l’interfaccia </li></ul><ul><ul><li>Vantaggi </li></ul></ul><ul><ul><ul><li>Nessun passo extra per invocare metodi nella finestra principale </li></ul></ul></ul><ul><ul><li>Svantaggi </li></ul></ul><ul><ul><ul><li>Bisogna implementare tutti i metodi, anche quelli non utili </li></ul></ul></ul>
  18. 18. Strategie di gestione eventi: Pro e Contro (Continua) <ul><li>Named inner class </li></ul><ul><ul><li>Vantaggi </li></ul></ul><ul><ul><ul><li>Possono estendere gli adapters e quindi ignorare i metodi non utilizzati </li></ul></ul></ul><ul><ul><ul><li>Nessun passo extra per invocare metodi nella finestra principale </li></ul></ul></ul><ul><ul><li>Svantaggi </li></ul></ul><ul><ul><ul><li>Un po’ più complesso da capire </li></ul></ul></ul><ul><li>Inner class anonime </li></ul><ul><ul><li>Vantaggi </li></ul></ul><ul><ul><ul><li>Gli stessi delle named inner classes </li></ul></ul></ul><ul><ul><ul><li>Anche più veloce </li></ul></ul></ul><ul><ul><li>Svantaggi </li></ul></ul><ul><ul><ul><li>Molto più complesso da capire </li></ul></ul></ul>
  19. 19. Listener di Eventi Standard AWT (Sommario)
  20. 20. Listener di Eventi Standard AWT (Dettagli) <ul><li>ActionListener </li></ul><ul><ul><li>Gestisce i bottoni e qualche altra azione </li></ul></ul><ul><ul><ul><li>actionPerformed(ActionEvent event) </li></ul></ul></ul><ul><li>AdjustmentListener </li></ul><ul><ul><li>Per gestire lo scrolling </li></ul></ul><ul><ul><ul><li>adjustmentValueChanged(AdjustmentEvent event) </li></ul></ul></ul><ul><li>ComponentListener </li></ul><ul><ul><li>Gestisce lo spostamento/ il resize/l’hide degli oggetti GUI </li></ul></ul><ul><ul><ul><li>componentResized(ComponentEvent event) </li></ul></ul></ul><ul><ul><ul><li>componentMoved (ComponentEvent event) </li></ul></ul></ul><ul><ul><ul><li>componentShown(ComponentEvent event) </li></ul></ul></ul><ul><ul><ul><li>componentHidden(ComponentEvent event) </li></ul></ul></ul>
  21. 21. Listener di Eventi Standard AWT (Dettagli) <ul><li>ContainerListener </li></ul><ul><ul><li>Invocato quando una window aggiunge/rimuove controlli GUI </li></ul></ul><ul><ul><ul><li>componentAdded(ContainerEvent event) </li></ul></ul></ul><ul><ul><ul><li>componentRemoved(ContainerEvent event) </li></ul></ul></ul><ul><li>FocusListener </li></ul><ul><ul><li>Notifica quando un controllo ottiente/perde il focus della tastiera </li></ul></ul><ul><ul><ul><li>focusGained(FocusEvent event) </li></ul></ul></ul><ul><ul><ul><li>focusLost(FocusEvent event) </li></ul></ul></ul>
  22. 22. Listener di Eventi Standard AWT (Dettagli) <ul><li>ItemListener </li></ul><ul><ul><li>Gestisce la selezione in liste, checkboxes, etc. </li></ul></ul><ul><ul><ul><li>itemStateChanged(ItemEvent event) </li></ul></ul></ul><ul><li>KeyListener </li></ul><ul><ul><li>Intercetta gli eventi della tastiera </li></ul></ul><ul><ul><ul><li>keyPressed(KeyEvent event) -- any key pressed down </li></ul></ul></ul><ul><ul><ul><li>keyReleased(KeyEvent event) -- any key released </li></ul></ul></ul><ul><ul><ul><li>keyTyped(KeyEvent event) -- key for printable char released </li></ul></ul></ul>
  23. 23. Listener di Eventi Standard AWT (Dettagli) <ul><li>MouseListener </li></ul><ul><ul><li>Per gestire gli eventi base del mouse </li></ul></ul><ul><ul><ul><li>mouseEntered(MouseEvent event) </li></ul></ul></ul><ul><ul><ul><li>mouseExited(MouseEvent event) </li></ul></ul></ul><ul><ul><ul><li>mousePressed(MouseEvent event) </li></ul></ul></ul><ul><ul><ul><li>mouseReleased(MouseEvent event) </li></ul></ul></ul><ul><ul><ul><li>mouseClicked(MouseEvent event) </li></ul></ul></ul><ul><ul><ul><ul><li>Rilasciato senza trascinamento. Non usare al posto di mousePressed! </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Si applica al release se non c’è stato movimento </li></ul></ul></ul></ul><ul><li>MouseMotionListener </li></ul><ul><ul><li>Gestisce i movimenti del mouse </li></ul></ul><ul><ul><ul><li>mouseMoved(MouseEvent event) </li></ul></ul></ul><ul><ul><ul><li>mouseDragged(MouseEvent event) </li></ul></ul></ul><ul><li>MouseInputListener </li></ul><ul><ul><li>Combina MouseListener e MouseMotionListener </li></ul></ul><ul><ul><ul><li>Nel package javax.swing.event, non in java.awt.event </li></ul></ul></ul><ul><ul><ul><li>Bisogna chiamare sia addMouseListener che addMouseMotionListener, quindi non si risparmia molto in tempo </li></ul></ul></ul>
  24. 24. Listener di Eventi Standard AWT (Dettagli) <ul><li>TextListener </li></ul><ul><ul><li>Gestisce gli eventi di Textfields e text areas </li></ul></ul><ul><ul><ul><li>textValueChanged(TextEvent event) </li></ul></ul></ul><ul><li>WindowListener </li></ul><ul><ul><li>Gestisce gli eventi ad alto livello degli eventi di window </li></ul></ul><ul><ul><ul><li>windowOpened, windowClosing, windowClosed, windowIconified, windowDeiconified, windowActivated, windowDeactivated </li></ul></ul></ul><ul><ul><ul><ul><li>windowClosing particolarmente utile </li></ul></ul></ul></ul>
  25. 25. Eventi del Mouse: Dettagli <ul><li>MouseListener e MouseMotionListener condividono i tipi di eventi </li></ul><ul><li>Location del click </li></ul><ul><ul><li>event.getX() e event.getY() </li></ul></ul><ul><ul><li>Si puo’ usare anche la classe MouseInfo per ottenere la poszione del mouse </li></ul></ul><ul><li>Doppio click </li></ul><ul><ul><li>Determinato dal OS, non dal programmatore </li></ul></ul><ul><ul><li>Invocare event.getClickCount() </li></ul></ul><ul><li>Distinguere i bottoni del mouse </li></ul><ul><ul><li>Invocare event.getModifiers() e comparare con le MASK MouseEvent.Button2_per il tasto centrale e MouseEvent.Button3_per il tasto destro. </li></ul></ul><ul><ul><li>Si puo’ anche catturare le combinazioni Shift-click, Alt-click.. </li></ul></ul>
  26. 26. Esempio semplice: Spelling-Correcting Textfield <ul><li>KeyListener corregge lo spelling durante la scrittura </li></ul><ul><li>ActionListener completa le parole alla pressione di ENTER </li></ul><ul><li>FocusListener fornisce suggerimenti </li></ul>
  27. 27. Esempio: Semplice Lavagna <ul><li>import java.applet.Applet; </li></ul><ul><li>import java.awt.*; </li></ul><ul><li>import java.awt.event.*; </li></ul><ul><li>public class SimpleWhiteboard extends Applet { </li></ul><ul><li>protected int lastX=0, lastY=0; </li></ul><ul><li>public void init() { </li></ul><ul><li>setBackground(Color.WHITE); </li></ul><ul><li>setForeground(Color.BLUE); </li></ul><ul><li>addMouseListener(new PositionRecorder()); </li></ul><ul><li>addMouseMotionListener(new LineDrawer()); </li></ul><ul><li>} </li></ul><ul><li>protected void record(int x, int y) { </li></ul><ul><li>lastX = x; lastY = y; </li></ul><ul><li>} </li></ul>
  28. 28. Esempio: Semplice Lavagna <ul><li>private class PositionRecorder extends MouseAdapter { </li></ul><ul><li>public void mouseEntered (MouseEvent event) { </li></ul><ul><li>requestFocus(); // Plan ahead for typing </li></ul><ul><li>record(event.getX(), event.getY()); </li></ul><ul><li>} </li></ul><ul><li>public void mousePressed (MouseEvent event) { </li></ul><ul><li>record(event.getX(), event.getY()); </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>... </li></ul>
  29. 29. Esempio: Semplice Lavagna <ul><li>... </li></ul><ul><li>private class LineDrawer extends MouseMotionAdapter { </li></ul><ul><li>public void mouseDragged (MouseEvent event) { </li></ul><ul><li>int x = event.getX(); </li></ul><ul><li>int y = event.getY(); </li></ul><ul><li>Graphics g = getGraphics(); </li></ul><ul><li>g.drawLine(lastX, lastY, x, y); </li></ul><ul><li>record(x, y); </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  30. 30. Esempio: Semplice Lavagna
  31. 31. Lavagna: Aggiungere gli eventi della tastiera <ul><li>import java.applet.Applet; </li></ul><ul><li>import java.awt.*; </li></ul><ul><li>import java.awt.event.*; </li></ul><ul><li>public class Whiteboard extends SimpleWhiteboard { </li></ul><ul><li>protected FontMetrics fm; </li></ul><ul><li>public void init() { </li></ul><ul><li>super.init(); </li></ul><ul><li>Font font = new Font(&quot;Serif&quot;, Font.BOLD, 20); </li></ul><ul><li>setFont(font); </li></ul><ul><li>fm = getFontMetrics(font); </li></ul><ul><li>addKeyListener(new CharDrawer()); </li></ul><ul><li>} </li></ul>
  32. 32. Lavagna (Continua) <ul><li>... </li></ul><ul><li>private class CharDrawer extends KeyAdapter { </li></ul><ul><li>// When user types a printable character, </li></ul><ul><li>// draw it and shift position rightwards. </li></ul><ul><li>public void keyTyped (KeyEvent event) { </li></ul><ul><li>String s = String.valueOf(event.getKeyChar()); </li></ul><ul><li>getGraphics().drawString(s, lastX, lastY); </li></ul><ul><li>record(lastX + fm.stringWidth(s), lastY); </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  33. 33. Lavagna (Results)
  34. 34. Sommario <ul><li>Stategie generali </li></ul><ul><ul><li>Determinare il tipo di listener da utilizzare </li></ul></ul><ul><ul><ul><li>Controllare la tavola dei tipi standard </li></ul></ul></ul><ul><ul><li>Definire una classe di quel tipo </li></ul></ul><ul><ul><ul><li>Estendere gli adapter separatamente, implementare un interfaccia, estendere gli adapter in una named inner class o in una inner class anonima </li></ul></ul></ul><ul><ul><li>Registrare un’istanza della vostra classe listener nella window </li></ul></ul><ul><ul><ul><li>Invocare add Xxx Listener </li></ul></ul></ul><ul><li>Comprendere i listeners </li></ul><ul><ul><li>i metodi hanno comportamenti specifici. </li></ul></ul><ul><ul><ul><li>gli argomenti dei metodi hanno parametri del tipo XxxEvent </li></ul></ul></ul><ul><ul><ul><ul><li>I metodi in MouseEvent sono di particolare interesse </li></ul></ul></ul></ul>

×