Přidávání událostí ke komponentě

Událost můžete přidat ke komponentě v pohledu Design či Java Beans v rámci vizuálního editoru pro prostředí Java.

Přidání události ke komponentě:
  1. Klepněte pravým tlačítkem myši na komponentu v pohledu Java Beans nebo v pohledu Design.
  2. V Rozevírací nabídce klepněte na Události. Rozevírací nabídka zobrazuje preferované události pro tuto komponentu. Proveďte jeden z následujících kroků:
    • Klepněte na jednu preferovanou událost pro tuto komponentu. Událost bude přidána ke komponentě. Například pro JFrame jsou preferovanými událostmi windowClosed a windowOpened.
    • Klepnutím na Přidat události se otevře okno Přidat události.
  3. Pokud jste otevřeli okno Přidat události, nabízí se vám seznam kategorizovaných událostí, ze kterého můžete vybírat. Vyberte událost, kterou chcete přidat a klepněte na Dokončit.
    • Dialogové okno Přidat událost zobrazuje všechny dostupné události pro komponentu v podobě stromu. Tento strom zobrazuje listenery událostí jako první úroveň položek a pod každou položkou listeneru jsou možná zpětná volání, která může událost vyvolat.
      dialogové okno Přidat událost
    • Dialogové okno můžete použít k určení, zda chcete vytvořit nový listener, nebo použít stávající. Při otevření analyzuje dialogové okno stávající listenery, a pokud najde takový, který považuje za znovupoužitelný, označí takový listener odlišnou ikonou. U stávajících listenerů které rozšiřují třídu adaptéru se použije ikona Třída přítomné události, v opačném případě se použije přítomná událost. Uvnitř vlastního listeneru jsou stávající události zobrazeny se zelenou šipkou zelená šipka a dostupné události jsou zobrazeny s neúplnou šipkou neudálost
    • Můžete určit, zda chcete použít stávající listener nebo zda chcete vytvořit nový. Při vytváření nového listeneru můžete zvolit, zda chcete rozšířit třídu adaptéru nebo pouze implementovat rozhraní listeneru. Pokud tato možnost není použitelná, výběrová tlačítka nebudou k dispozici. Například pokud neexistuje stávající listener nebo je stávající listener vybrán, ale vybraná událost je již používána, nebude k dispozici výběrové tlačítko Použít stávající listener. Pokud není k dispozici třída adaptéru pro nový listener, bude znepřístupněno výběrové tlačítko rozšiřuje: ADAPTER_CLASS_NAME.
    • Pokud v dialogovém okně Přidat událost zvolíte propertyChange, máte další možnosti pro přidání zpětného volání. Je možné vytvořit nový listener, který je možné přidat do objektu JavaBean pomocí metody addPropertyChange(PropertyChangeListener listener). Pokud k tomu dojde, bude použita obecná metoda zpětného volání propertyChange(PropertyChangeEvent event) pro všechny události vlastnosti. U některých objektů JavaBeans (jako např. komponenty Swing) je dostupná metoda se dvěma argumenty addPropertyChange(String propertyName, PropertyChangeListener listener) a je vybrána ve výchozím nastavení k použití pro nový listener.

      dialogové okno Přidat událost

      Listener, který je přidán pomocí metody se dvěma argumenty, je specifický pro konkrétní vlastnost, takže nemůže být znovu použit pro jinou vlastnost. Listener přidaný metodou s jedním argumentem má příkaz if, který kontroluje název vlastnosti před zpracováním logiky pro každé zpětné volání vlastnosti, jak je ukázáno v následujícím kódu:

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

      Tím se umožní, aby listener PropertyChangeListener přidaný metodou s jedním argumentem mohl být používán pro více než jednu vlastnost (tím, že se použije více bloků if{}). 

Když přidáte událost, pokud je k dispozici použitelný stávající listener, přidá se metoda zpětného volání. Jinak je vytvořen nový listener. Aby mohl být použit stávající listener, musí to být anonymní vnitřní třída na objektu JavaBean, která implementuje rozhraní listeneru. Musí mít prázdné tělo metody pro metodu zpětného volání, nebo musí rozšířit třídu adaptéru. A nemít přidanou žádnou stávající metodu pro zpětné volání události. V případě vlastnosti bude stávající PropertyChangeListener znovu použit, pokud je přidán k objektu JavaBean metodou s jedním argumentem addPropertyChange(PropertyChangeListener listener). Pokud dosud nemá kód, bude přidáno zpracování vlastnosti.

Pokud není žádný kandidát na stávající listener, na který by mohla být přidána metoda zpětného volání, bude vytvořen nový listener. Bude to anonymní vnitřní třída, a pokud byla definována třída adaptéru pro tuto událost, pak ji listener rozšíří. Jinak bude implementovat rozhraní listeneru. Jakmile je událost přidána, vytvoří se kmenová metoda s komentářem //TODO. Kmenová metoda je indikátorem zdrojového kódu, který bude vykonán při výskytu události, a vy byste potom toto měli změnit tak, aby se projevilo vámi požadované chování. Komentář //TODO je zobrazen v okně Úlohy, a označuje tak nekompletní metody. Je tomu tak proto, abyste je mohli později vyhledat a komentář //TODO odebrat, až bude logika zpětného volání napsána.

V předchozím příkladě metoda windowOpened již existuje. Pokud je toto listener, který rozšiřuje adaptér, bude stejný listener znovu použit, protože již nemá metodu windowClosed. MetodawindowClosed(WindowEvent e) je přidána a doplněn kmen metody a komentář //TODO, jak je ukázáno zde:

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();      
            }  
});

V režimu pro odborníky je možné přidávat události do objektu JavaBean tak, jak bylo ukázáno výše, ale mohou být také přidávány k listeneru ve stromě objektů Java Bean. Nabídka Události zobrazuje všechny metody zpětného volání události na listeneru, přičemž ty, které jsou již použity, jsou znepřístupněny.

přidání události zavření okna

V případě listeneru PropertyChangeListener zobrazuje rozevírací nabídka všechny vlastnosti vázané na objekt JavaBean. Pokud jsou některé již použity v listeneru PropertyChangeListener, budou znepřístupněny.

změna vlastnosti listeneru

Listener přidaný metodou s jedním argumentem má příkaz "if", který kontroluje název vlastnosti před zpracováním logiky pro každé zpětné volání vlastnosti, jak je ukázáno v následujícím kódu:

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

Tím se umožní, aby listener PropertyChangeListener přidaný metodou s jedním argumentem mohl být používán pro více než jednu vlastnost (tím, že se použije více bloků if{}), a když je přidáno druhé a další zpětné volání vlastnosti, přidají se nové bloky if{}.

Pokud je listener propertyChangeListener přidán k objektu JavaBean pomocí metody se dvěma argumenty addPropertyChangeListener(String propertyName, PropertyChangeListener listener), je specifický pro konkrétní vlastnost, takže nemůže být znovu použit pro jinou vlastnost. V tomto případě jsou znepřístupněny všechny podřízené prvky kaskádové nabídky Události.

Související pojmy
Třídy událostí, listenerů a adaptérů
Pohled Java Beans
Související úlohy
Zobrazení událostí pro komponentu
Odstraňování událostí z komponenty
Zobrazení zdrojového kódu události

(C) Copyright IBM Corporation 1999, 2004. Všechna práva vyhrazena.