Aggiunta di eventi a un componente

E' possibile aggiungere un evento a un componente nella vista Progettazione o nella vista Bean Java.

Per aggiungere un evento a un componente:
  1. Fare clic con il tasto destro del mouse sul componente nella vista Bean Java o nella vista Progettazione.
  2. Dal menu a comparsa scegliere Eventi. Nel menu a comparsa sono elencati gli eventi preferiti del componente. Effettuare una delle seguenti operazioni:
    • Fare clic su uno degli eventi preferiti del componente. L'evento verrà aggiunto al componente. Ad esempio, nel caso di un componente JFrame gli eventi preferiti sono windowClosed e windowOpened.
    • Fare clic su Aggiungi eventi per aprire la finestra corrispondente.
  3. Nella finestra è possibile effettuare una scelta dall'elenco di eventi suddivisi per categorie. Selezionare l'evento che si desidera aggiungere e fare clic su Fine.
    • All'interno di una struttura ad albero nella finestra vengono visualizzati tutti gli eventi disponibili per il componente.  Come primo livello di voci della struttura ad albero sono elencati i listener di evento e sotto ciascuno di essi vi sono i possibili callback che l'evento è in grado di generare.
      Finestra Aggiunta evento
    • E' possibile utilizzare la finestra per stabilire se si desidera creare un nuovo listener o utilizzarne uno esistente. All'apertura della finestra, vengono analizzati i listener esistenti e se ne viene individuato uno che si ritiene possa essere riutilizzato, viene contrassegnato con un'icona diversa: Classe di evento presente se il listener esistente estende una classe di adattori, oppure Evento presente in tutti gli altri casi. All'interno del listener, gli eventi esistenti vengono indicati con una freccia verde Freccia verde e gli eventi disponibili vengono indicati con una freccia incompleta Non evento
    • E' possibile stabilire se utilizzare o meno il listener esistente o crearne uno nuovo. Se ne viene creato uno nuovo, è possibile scegliere se dovrà estendere la classe di adattatori oppure soltanto implementare l'interfaccia listener. Se un'opzione non è applicabile, i pulsanti di opzione sono disattivati. Ad esempio, se non è disponibile alcun listener esistente oppure viene selezionato un listener esistente, ma l'evento selezionato è già in uso, l'opzione Utilizza listener esistente verrà disattivata. Se invece non è disponibile alcuna classe di adattatori per un nuovo listener, il pulsante di opzione estendi: ADAPTER_CLASS_NAME verrà disattivato.
    • Se si seleziona propertyChange nella finestra Aggiunta evento, saranno disponibili ulteriori opzioni per l'aggiunta del callback. E' possibile creare un nuovo listener da aggiungere al JavaBean utilizzando il metodo addPropertyChange(PropertyChangeListener listener). In questo caso, il metodo di callback generico propertyChange(PropertyChangeEvent event) del listener verrà utilizzato per tutti gli eventi di proprietà.  In alcuni JavaBean (come ad esempio i componenti Swing), è disponibile il metodo con due argomenti addPropertyChange(String propertyName, PropertyChangeListener listener), selezionato per impostazione predefinita per l'utilizzo con il nuovo listener.

      Finestra Aggiunta evento

      Un listener aggiunto attraverso il metodo con i due argomenti è specifico di una particolare proprietà, pertanto non può essere riutilizzato per un'altra proprietà. Un listener aggiunto attraverso un metodo con un solo argomento dispone di un'istruzione if con la quale viene verificato il nome della proprietà prima di elaborare la logica per ogni callback di proprietà, come illustrato nel codice seguente:

      javaBean.addPropertyChangeListener(new java.beans.PropertyChangeListener() { 
           public void propertyChange(java.beans.PropertyChangeEvent e) {  
              if ((e.getPropertyName().equals("font"))) {  
                  System.out.println("propertyChange(font)");   
             }  
          }  
      });

      In questo modo, un listener PropertyChangeListener aggiunto attraverso un metodo con un unico argomento può essere utilizzato per più di una proprietà ( grazie a più blocchi if{} ). 

Quando si aggiunge un evento ed è possibile utilizzare un listener esistente, ad esso verrà aggiunto il metodo di callback. Diversamente, verrà creato un nuovo listener. Per poter utilizzare un listener esistente, una classe anonima interna nel JavaBean deve implementare l'interfaccia listener, deve avere un corpo di metodo vuoto per il metodo di callback oppure deve estendere la classe di adattori. Inoltre non deve avere alcun metodo esistente da aggiungere per il callback degli eventi.  Nel caso di una proprietà, verrà riutilizzato un listener PropertyChangeListener esistente se viene aggiunto al JavaBean attraverso il metodo con un unico argomento addPropertyChange(PropertyChangeListener listener). Se non dispone già di codice, verrà aggiunta l'elaborazione della proprietà.

Se non è disponibile alcun listener esistente idoneo al quale è possibile aggiungere il metodo di callback, verrà creato un nuovo listener.  Questo sarà una classe anonima interna, che verrà estesa dal listener se è stata definita una classe di adattatori per l'evento. In caso contrario, verrà implementata l'interfaccia listener.  Una volta aggiunto l'evento, viene creato un metodo di stub con un commento  //TODO.  Il metodo di stub è un indicatore del codice di origine che verrà eseguito al verificarsi dell'evento; per ottenere il funzionamento richiesto, occorre modificare questo metodo. Il commento //TODO viene visualizzato nella finestra Attività e indica i metodi incompleti. In questo modo, è possibile individuarli successivamente e rimuovere il commento //TODO una volta creata la logica di callback.

Nell'esempio precedente, il metodo windowOpened esiste già.  Se si tratta di un listener che estende l'adattatore, verrà riutilizzato lo stesso listener perché non dispone già di un metodo windowClosed. Viene aggiunto il metodo windowClosed(WindowEvent e), lo stub del metodo e il commento //TODO, come illustrato di seguito:

this.addWindowListener(new java.awt.event.WindowAdapter() {       
        public void windowClosed(java.awt.event.WindowEvent e) {  
         System.out.println("windowClosed()"); // TODO Auto-generated stub windowClosed()       
              }       
        public void windowOpened(java.awt.event.WindowEvent e) {          
             callExistingWindowOpenedLogic();      
            }  
});

In modalità esperto, gli eventi possono essere aggiunti al JavaBean come illustrato precedentemente, ma possono anche essere aggiunti a un listener nella struttura ad albero Bean Java.  Nel menu Eventi sono elencati tutti i metodi di callback degli eventi in un listener e tutti quelli già utilizzati risultano disabilitati.

Finestra di aggiunta chiusa

Nel caso di un listener PropertyChangeListener, nel menu a comparsa sono elencate tutte le proprietà associate nel JavaBean.  Tutte quelle che sono già utilizzate da PropertyChangeListener verranno disabilitate.

Listener di modifica delle proprietà

Un listener aggiunto attraverso un metodo con un unico argomento dispone di un'istruzione if che consente di verificare il nome della proprietà prima di elaborare la logica di callback di ogni proprietà, come illustrato nel codice seguente:

javaBean.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
    public void propertyChange(java.beans.PropertyChangeEvent e) {                        
             if ((e.getPropertyName().equals("font"))) {              
                   System.out.println("propertyChange(font)");         
             }     
          }  
    });

In questo modo, un listener PropertyChangeListener aggiunto attraverso il metodo con un unico argomento potrà essere utilizzato per più di una proprietà ( grazie a più blocchi if{} ) e quando verrà aggiunto un secondo callback di proprietà, verrà aggiunto anche un nuovo blocco if{}.

Se il listener propertyChangeListener viene aggiunto al JavaBean attraverso il metodo con due argomenti addPropertyChangeListener(String propertyName, PropertyChangeListener listener), risulterà specifico di una particolare proprietà e non potrà essere riutilizzato per un'altra proprietà. In questo caso, verranno disabilitate tuttte le voci secondarie del menu a discesa Eventi.

Argomento principale: Gestione di eventi con l'editor visuale

Argomenti correlati
Vista Bean Java

Attività correlate
Eliminazione di eventi da un componente
Visualizzazione di eventi per un componente
Visualizzazione del codice di origine di un evento

(C) Copyright IBM Corporation 1999, 2004. Tutti i diritti riservati.