IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 6 - Programování jednoduchých Java GUI her - Události 2

V předchozí lekci, Programování jednoduchých Java GUI her - Události, jsme se podívali na to, co jsou to události a jak se v Javě používají.

V tomto díle budeme pokračovat v událostech.

Události - pokračování

V předchozím díle jsme si řekli, že události typu ActionEvent (například stisknutí tlačítka) jsou směrovány na posluchače implementující rozhraní ActionListener. Tento posluchač pak musí implementovat metodu ActionPerformed, ve které se pak uvádí, co se má po vzniku události ActionEvent provést.

Nyní si ukážeme událost typu KeyEvent, která vzniká stisknutím/puštěním tlačítka na klávesnici a jak na ni reagovat.

import java.awt.Dimension;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class PanelUdalosti extends JPanel {
    private JLabel navesti;

    public PanelUdalosti() {
        this.setPreferredSize(new Dimension(300, 30));

        navesti = new JLabel("Tady je návěstí");
        this.add(navesti);

        PosluchacPanelu posluchacPanelu = new PosluchacPanelu();
        this.addKeyListener(posluchacPanelu);

        // komponenta získá fokus
        this.setFocusable(true);
    }

    private class PosluchacPanelu implements KeyListener {
        @Override
        public void keyPressed(KeyEvent e) {
            navesti.setText("Stisknul jsi klávesu.");
        }

        @Override
        public void keyReleased(KeyEvent e) {
            navesti.setText("Pustil jsi klávesu.");
        }

        @Override
        public void keyTyped(KeyEvent e) {
            //is only generated if a valid Unicode character could be generated.
        }
    }
}

Opět začneme od konce.

private class PosluchacPanelu implements KeyListener {
    @Override
    public void keyPressed(KeyEvent e) {
        navesti.setText("Stisknul jsi klávesu.");
    }

    @Override
    public void keyReleased(KeyEvent e) {
        navesti.setText("Pustil jsi klávesu.");
    }

    @Override
    public void keyTyped(KeyEvent e) {
        //is only generated if a valid Unicode character could be generated.
    }
}

Vytvoříme si třídu, jejíž objektu potom budeme zasílat zprávy (události) generované stiskem klávesy na klávesnici. Tento objekt musí implementovat rozhraní KeyListener (posluchač kláves).

Při implementování tohoto rozhraní je třeba předefinovat tři metody.

public void keyPressed(KeyEvent e)

Co se má provést při stisku klávesy.

public void keyReleased(KeyEvent e)

Co se má provést, když je klávesa puštěna.

public void keyTyped(KeyEvent e)

Co se má provést při stisku běžné klávesy (klávesa, která reprezentuje znak).

PosluchacPanelu posluchacPanelu = new PosluchacPanelu();

Vytvoření objektu typu PosluchacPanelu.

this.addKeyListener(posluchacPanelu);

Tímto řádkem kódu si JPanel registruje posluchacPanelu jako svého posluchače, kterému bude zasílat zprávy (události). Lze psát i bez klíčového slova this.

this.setFocusable(true);

Aby komponenta mohla generovat události KeyEvent, musí mít zaměření (focus). Tímto přidáváme focus komponentě JPanel. Na toto si dávejte pozor. Pokud na focus zapomenete, program se normálně spustí, vstup z klávesnice ale nefunguje.

@Override
    public void keyTyped(KeyEvent e) {
    }

Ještě se vrátím k metodě keyTyped(). Ta je volána při stisknutí klávesy reprezentující znak. Pro tuto metodu nemáme žádné použití, ale protože je součástí rozhraní KeyListener, které implementujeme, musíme implementovat i tuto metodu.

A takhle vypadá náš výsledek.

Události klávesnice v Javě - Tvorba her v Java Swing
Události klávesnice v Javě - Tvorba her v Java Swing
Události klávesnice v Javě - Tvorba her v Java Swing

Doposud jsme nikdy nevyužili objektu zprávy (události). U JButtonu to byl objekt ActionEvent, u klávesnice KeyEvent. V následujícím příkladu si ukážeme, jak lze s těmito objekty pracovat.

import java.awt.Dimension;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class PanelUdalosti extends JPanel {
    private JLabel navesti;

    public PanelUdalosti() {
        this.setPreferredSize(new Dimension(300, 30));

        navesti = new JLabel("Tady je návěstí");
        this.add(navesti);

        PosluchacPanelu posluchacPanelu = new PosluchacPanelu();
        this.addKeyListener(posluchacPanelu);
        this.setFocusable(true);
    }

    private class PosluchacPanelu implements KeyListener {
        @Override
        public void keyPressed(KeyEvent e) {
            navesti.setText("Stisknul jsi klávesu: " + e.getKeyChar());
        }

        @Override
        public void keyReleased(KeyEvent e) {
            navesti.setText("Pustil jsi klávesu jejíž číselný kód je: " + e.getKeyCode());
        }

        @Override
        public void keyTyped(KeyEvent e) {
            //is only generated if a valid Unicode character could be generated.
        }
    }
}

Až na dva řádky zde není nic nového.

navesti.setText("Stisknul jsi klávesu: " + e.getKeyChar());

Volání metody getKeyChar() objektu KeyEvent. Metoda vrací znak přiřazený dané klávese.

navesti.setText("Pustil jsi klávesu jejíž číselný kód je: " + e.getKeyCode());

Volání metody getKeyCode() objektu KeyEvent. Metoda vrací číselný kód přiřazený dané klávese.

Události klávesnice v Javě - Tvorba her v Java Swing
Události klávesnice v Javě - Tvorba her v Java Swing
Události klávesnice v Javě - Tvorba her v Java Swing
Události klávesnice v Javě - Tvorba her v Java Swing
Události klávesnice v Javě - Tvorba her v Java Swing

Z objektu události lze získat mnoho informací. Pro nás je nejdůležitější, že pomocí objektu události, můžeme od sebe rozlišit jednotlivé klávesy. Dokážeme přesně říci, která klávesa byla stisknuta (puštěna) a můžeme určit, jak se má náš program chovat při stisku (nebo puštění) určitých klávese.

V příští lekci, Programování jednoduchých Java GUI her - Časovač, si rozpohybujeme objekt na JPanelu a pomocí časovače si vytvoříme animaci.


 

Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 264x (2.5 kB)
Aplikace je včetně zdrojových kódů v jazyce Java

 

Předchozí článek
Programování jednoduchých Java GUI her - Události
Všechny články v sekci
Tvorba her v Java Swing
Přeskočit článek
(nedoporučujeme)
Programování jednoduchých Java GUI her - Časovač
Článek pro vás napsal vita
Avatar
Uživatelské hodnocení:
15 hlasů
vita
Aktivity