Myšacie udalosti v JPAZe

<< Typ char a znakové reťazce | Obsah | Inštančné premenné >>

V súčasnosti sme už zvyknutí, že každú rozumnú aplikáciu vieme nejako ovládať aj prostredníctvom myši. Kresliaca plocha JPAZu (objekty triedy WinPane) nie je v tomto smere výnimkou. Spracovávať myšacie udalosti (elementárne akcie vykonané myšou) kresliacej plochy vieme iba v triedach, ktoré rozširujú triedu WinPane. Ak v takejto triede vytvoríme nasledovnú metódu, JPAZ sa postará, aby sa vykonala vždy, keď sa klikne myšou do kresliacej plochy:

protected void onMouseClicked(int x, int y, MouseEvent detail) {
        // prikazy metody
}

Metóda onMouseClicked má aj 3 parametre. Prostredníctvom nich nám JPAZ povie bližšie informácie o tom, čo sa stalo. Konkrétne v parametri x dostaneme x-ovú súradnicu myši, v parametri y y-ovú súradnicu myši a nakoniec v parametri detail referenciu na objekt triedy MouseEvent. Objekt triedy MouseEvent je zaujímavý tým, že nám vie poskytnúť ďalšie informácie o tom, čo sa stalo.

Spomeňme pár najzaujímavejších metód objektov triedy MouseEvent:

  • boolean isAltDown() - true, ak pri udalosti bol kláves Alt zatlačený
  • boolean isControlDown() - true, ak pri udalosti bol kláves Ctrl zatlačený
  • boolean isShiftDown() - true, ak pri udalosti bol kláves Shift zatlačený
  • int getButton() - vráti kód tlačidla, ktorý udalosť spôsobil. Hodnoty týchto pre jednotlivé tlačidla kódov sú tieto:
    • MouseEvent.BUTTON1
    • MouseEvent.BUTTON2
    • MouseEvent.BUTTON3

Pozrime sa, ako by vyzerala metóda onMouseClicked, ak by sme chceli niečo vykonať, iba vtedy ak sa kliklo ľavým tlačidlom myši a zároveň bol počas kliknutia zatlačený kláves Ctrl:

protected void onMouseClicked(int x, int y, MouseEvent detail) {
        if ((detail.getButton() == MouseEvent.BUTTON1) && detail.isControlDown()) {        
               // prikazy metody
        }
}

Okrem kliknutia do kresliacej plochy existujú aj ďalšie myšacie udalosti, ktoré vie JPAZ "obslúžiť" pomocou metód so "správnym" menom a parametrami:

  • onMouseClicked - pri kliknutí do plochy (vykonáva sa až vtedy, keď bolo tlačidlo myši pustené)
  • onMousePressed - pri zatlačení tlačidla myši
  • onMouseReleased - pri uvoľnení tlačidla myši
  • onMouseMoved - pri pohybe myši v stave, kedy žiadne jej tlačidlo nie je zatlačené
  • onMouseDragged - pri pohybe myši v stave, kedy niektoré jej tlačidlo je zatlačené

Všetkých 5 spomenutých metód má rovnaké predpísané parametre ako onMouseClicked:

protected void onMouseClicked(int x, int y, MouseEvent detail)
protected void onMousePressed(int x, int y, MouseEvent detail)
protected void onMouseReleased(int x, int y, MouseEvent detail)
protected void onMouseMoved(int x, int y, MouseEvent detail)
protected void onMouseDragged(int x, int y, MouseEvent detail)

Kreslenie do kresliacej plochy

Zvyčajne, keď vytvoríme novú triedu, ktorá rozširuje triedu WinPane, potrebujeme do nej pridať pár metód, ktoré niečo nakreslia. Žial, samotná kresliaca plocha (aj keď je kresliaca) veľmi kresliť nevie. Ak teda chceme niečo do kresliacej plochy nakresliť, musíme si najprv vytvoriť korytnačku, ktorou to, čo treba, nakreslíme. Aby mohla kresliť, musíme ju najprv do plochy pridať. No a po skončení kreslenia, musíme korytnačku z kresliacej plochy "vyhodiť":

public void kresliacaMetodaPlochy {
        // Vytvorime korytnacku, ktoru pouzijeme na kreslenie
        Turtle k = new Turtle();
        // Pridame ju do tejto kresliacej plochy
        this.add(k);

        // Korytnacka k kresli ...

        // Korytnacku uz nepotrebujeme, tak ju "vyhodime"
        // z tejto kresliacej plochy
        this.remove(k)
}

<< Typ char a znakové reťazce | Obsah | Inštančné premenné >>