1 / 25

gestione eventi

gestione eventi. classi interne, frame e pannelli. istanza classe interna. classi interne. definite internamente a un’altra classe ne sono membri ogni istanza di una classe interna esiste all’interno di un’istanza della classe esterna e ha pieno accesso ai membri di questa.

cianna
Download Presentation

gestione eventi

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. gestione eventi classi interne, frame e pannelli

  2. istanza classe interna classi interne • definite internamente a un’altra classe • ne sono membri • ogni istanza di una classe interna esiste all’interno di un’istanza della classe esterna e ha pieno accesso ai membri di questa istanza classe esterna IGEA 2001/02

  3. repaint() • il metodo paint di un’applet non dovrebbe mai essere esplicitamente chiamato • è responsabilità della JVM • si può chiedere alla JVM di provvedere al ridisegno tramite l’invocazione repaint() • no parametri attuali (paint avrebbe richiesto un parametro Graphics) • la JVM provvede al ridisegno non appena possibile • non chiamare repaint() dal metodo paint • errore concettuale IGEA 2001/02

  4. applet che sposta l’uovo public class EggApplet extends Applet { public EggApplet() { egg = new Ellipse2D.Double(0, 0, W, H); MouseClickListener listener = new MouseClickListener(); addMouseListener(listener); } public void paint(Graphics g) { Graphics2D g2 = (Graphics2D)g; g2.draw(egg); } private Ellipse2D.Double egg; private static final double W = 30, H = 50; // continua prossima slide IGEA 2001/02

  5. applet che sposta l’uovo/2 // definizione della classe interna private class MouseClickListener extends MouseAdapter { public void mouseClicked(MouseEvent event) { int mouseX = event.getX(); int mouseY = event.getY(); // sposta l'ellisse su (mouseX, mouseY) egg.setFrame(mouseX - W / 2, mouseY - H / 2, W, H); repaint(); // ridisegna, appena possibile } } // fine classe interna MouseClickListener } // fine classe esterna EggApplet v. applet EggDrag che trascina l’uovo IGEA 2001/02

  6. applicazioni grafiche • sfruttano il package java.awt • a partire da jdk 1.2 il package estensione javax.swing è stato integrato nella distribuzione standard • attualmente le applicazione grafiche “più standard” sono quelle costruite tramite javax.swing • le uniche realmente multipiattaforma IGEA 2001/02

  7. frame import javax.swing.JFrame; class EggFrame extends JFrame { public EggFrame() { setSize(200, 200); } } public class FrameTest { public static void main (String args[]) { EggFrame f = new EggFrame(); f.setTitle("EggFrame"); f.show(); } } finestra con bordatura e barra del titolo IGEA 2001/02

  8. thread • singolo flusso sequenziale di controllo all’interno di un programma in esecuzione • argomento avanzato • v. tutorial C:\jdk1.3.1_02\tutorial\essential\threads\definition.html • percorso essential\threads\definition.html relativo alla cartella base del tutorial IGEA 2001/02

  9. nozioni base sui frame • all’avvio del main si attiva il main thread • la visualizzazione del frame è l’inizio di un secondo thread (dell’interfaccia grafica) • deve essere chiuso esplicitamente con System.exit(.) • System.exit(.) termina la JVM corrente • non conviene chiamare System.exit(.) nel main poiché il programma terminerebbe immediatamente IGEA 2001/02

  10. chiusura di un frame • si realizza chiamando System.exit(.) in seguito al click utente sull’icona di chiusura finestra • occorre intercettare gli “eventi finestra” (WindowEvent) IGEA 2001/02

  11. eventi finestra • classe WindowEvent • interface WindowListener • windowOpened(WindowEvent e) • windowClosed(WindowEvent e) • windowActivated(WindowEvent e) • windowDeactivated(WindowEvent e) • windowIconified(WindowEvent e) • windowDeiconified(WindowEvent e) • windowClosing(WindowEvent e) • adapter WindowAdapter IGEA 2001/02

  12. chiusura di un frame/2 class EmptyFrame extends JFrame { public EmptyFrame() { setSize(200, 200); WindowCloser listener = new WindowCloser(); addWindowListener(listener); } private class WindowCloser extends WindowAdapter { public void windowClosing(WindowEvent event) { System.exit(0); } } } IGEA 2001/02

  13. nozioni base sui frame/2 • la superficie di un frame Swing è ricoperta da quattro lastre • radice (rootPane) • vetro (glassPane) • contenuti (contentPane) • stratificata (layeredPane) IGEA 2001/02

  14. contenimento fra lastre rootPane cattura eventi del mouse layeredPane glassPane contentPane menuBar (opzionale) contiene pannelli a discrezione utente contiene la barra dei menu (se presente) IGEA 2001/02

  15. pannelli • consentono di disegnare • classe JPanel di Swing • si addizionano alla lastra dei contenuti (contentPane) • la lastra dei contenuti può contenere pannelli disposti secondo schemi predefiniti • es. “a zone”, con cinque zonedenominate “North”, “South”, “West”, “East” e “Center” IGEA 2001/02

  16. disegno in un pannello • situazione simile a quelle delle applet • metodo paintComponent(Graphics g) invece di paint(Graphics g) • la prima istruzione di paintComponent deve essere super.paintComponent(g) • per disegnare sfondo, bordi, decorazioni ed impostare gli attributi dell’oggetto Graphics IGEA 2001/02

  17. inserimento pannelli nella lastra dei contenuti • metodo add(JPanel mioPannello) applicato all’oggetto contentPane • l’oggetto contentPane si ottiene con il metodo getContentPane() applicato all’oggetto JFrame • mioJFrame.getContentPane().add(mioPannello) IGEA 2001/02

  18. esempio • applicazione grafica (JFrame) per il trascinamento di un uovo • classe EggFrame IGEA 2001/02

  19. componenti • public abstract class Component extends Object • oggetti che • hanno una rappresentazione grafica • possono essere mostrati sullo schermo • possono interagire con l’utente • pannelli e lastra dei contenuti sono (IS-A) Component • altri es.: pulsanti, campi di testo, checkbox, barre di scorrimento ecc. IGEA 2001/02

  20. contenitori • public class Container extends Component • componenti speciali concepiti per essere “contenitori di componenti” • la lastra dei contenuti è un contenitore • metodo add(.) per addizionare un componente • ogni contenitore ha il proprio “gestore del layout” (o “layout manager”) • il layout manager stabilisce come debbono essere disposti i componenti • un JPanel IS-A Container IGEA 2001/02

  21. layout manager • il layout manager di un contenitore dispone normalmente i componenti “a scorrimento” • orizzontalmente e sequenzialmente, andando a capo solo quando lo spazio orizzontale è esaurito • il layout manager di una lastra dei contenuti dispone i componenti “a zona” • ad ogni contenitore si può associare un nuovo layout manager tramite il metodo setLayout(.) IGEA 2001/02

  22. layout manager/2 • setLayout(new FlowLayout()) • a scorrimento • ciascun componente avrà la sua “ampiezza naturale” • setLayout(new BorderLayout()) • a zona • componenti con ampiezze tali da riempire il contenitore • setLayout(new GridLayout(m, n)) • a griglia m × n • celle di dimensione costante IGEA 2001/02

  23. campi di testo • public class JTextField extends JTextComponent • IS-A Component • oggetti JTextField realizzano campi di testo • consentono l’input/output di stringhe tramite i metodi getText() e setText(.) • l’evento più interessante da controllare su un JTextField è la pressione del tasto “invio” (è un ActionEvent) IGEA 2001/02

  24. eventi azione • classe ActionEvent • interface ActionListener • actionPerformed(ActionEvent e) • azioni utente che innescano un ActionEvent • pressione di invio in un JTextField • click su pulsante IGEA 2001/02

  25. esempio/2 • applicazione grafica (JFrame) per il trascinamento di un uovo, visualizzazione delle sue cordinate e impostazione coordinate da parte dell’utente • classe EggFrame2 IGEA 2001/02

More Related