RELAZIONE 5 ANCARANI SILVIA DESCRIZIONE DEL PROBLEMA Si vuole impostare una finestra che sia centrata nello schermo, che abbia dimensioni fisse e che possa essere chiusa con un opportuno comando legato ad un bottone che chiamerò “QUIT”. Al centro della finestra viene inserita una croce di dimensioni 10*10 che può essere spostata, all’interno della finestra, premendo degli opportuni bottoni che ne consentano il movimento verso l’alto, il basso, destra e sinistra. ANALISI DEL PROBLEMA La classe PanelSuper è una sottoclasse di Jpanel, e sono entrambe delle implementazioni delle interfacce ActionListener e WindowListener. Occorre quindi importare java.awt.* ; javax.swing.*; java.awt.event.* che sono i package necessari per realizzare delle applicazioni grafiche. PanelSuper introduce dei metodi che utilizza e che possono modificare quelli già esistenti nella classe base Jpanel; viene utilizzato per realizzare un pannello che poi verrà personalizzato con gli opportuni comandi. Innanzitutto creo un pannello a partire dalla classe base Jpanel e lo suddivido in “sottopannelli”, ossia lo suddivido in parte “est”, “sud”, “ovest”, “nord” e “center” e le gestisco in modo autonomo. Nella parte sud del pannello inserisco i bottoni di funzionamento: - allineati a sinistra metto i tasti “up”, “down”, “left” e “right”; - allineato a destra metto il tasto “quit” che serve per la chiusura della finestra. Per realizzare la finestra ho utilizzato i metodi di drawLine, in modo da creare i bordi del pannello e delimitare i bottoni, e paintComponent. Nella sottoclasse PanelSuper utilizzo il costruttore invocandolo con “super( )” e ne definisco, oltre alle dimensioni, anche i colori. La selezione del colore viene effettuata utilizzando il metodo della classe Graphics che deve essere richiamato sull’oggetto Graphics che rappresenta l’area su cui si voile definire il colore di sfondo. Creo poi i bottoni a partire dal metodo JButton appartenente alla classe Jpanel e li posiziono nella parte sud del pannello. Bisogna quindi assegnare ad ogni bottone la funzione che deve eseguire quando viene premuto ed utilizzo le interfacce ActionListener e WindowListener appartenenti al package Swing. In java un evento è un oggetto ed appartiene al package “java.awt.event” di cui fa parte ActionEvent. La logica vuole che ogni componente venga associato ad un ascoltatore di eventi (un oggetto che implementa l’opportuna interfaccia Listener). La gestione degli eventi viene effettuata dall’ascoltatore che nel nostro caso è un pannello totale (PanelSuper) ossia ingloba tutti i sottopannelli. Quando si preme un bottone si genera un evento di classe ActionEvent che viene inviato dal sistema all’ascoltatore degli eventi di classe ActionLestener e se è il pannello stesso su cui sto lavorando, basterà usare “this” per indicarlo. L’ascoltatore degli eventi deve implementare il metodo e quindi si ha: void actionPerformed (ActionEvent ev). E’ importante dare come parametro nel costruttore dell’ascoltatore , la Jlabel su cui dovrà agire. Per quanto riguarda gli eventi di finestra sono gestiti dai metodi dichiarati nell’interfaccia WindowListener. Per chiudere l’applicazione quando viene chiusa la finestra del frame, occorre che il frame implementi l’interfaccia WindowListener in modo da invocare il System.exit. PROGETTO Per creare la classe PanelSuper parto dalla classe base Jpanel ed utilizzo i suoi metodi per ereditarietà. La classe base appartiene al package fornito: javax.Swing.* IMPLEMENTAZIONE: MyFrame.java PanelSuper.java EsempioSwing.java Codice e documentazione relativi alle classi. Prima di tutto è necessario importare all’inizio del codice import.java.awt.*; import.javax.Swing.*; e import.java.awt.event.* Ora posso creare PanelSuper con lo stesso costruttore della classe base. Creo poi il componente SW EsempioSwing.java nel quale verifico il funzionamento del pannello che ho creato con i relativi bottoni. CASI D’USO Codice e documentazione relativi al file EsempioSwing.java (Vedi figura sotto) NOZIONI ACQUISITE Con questo progetto ho imparato ed utilizzato le applicazioni grafiche in java continuando a sfruttare l’ereditarietà fra classi e l’implementazione delle interfacce. Ho quindi imparato ad impostare una finestra e a gestirne gli eventi ed i layout.