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 3 - Java GUI - událost

V minulém díle, Java GUI - Základní komponenty, jsme si vytvořili jednoduchou kalkulačku, která ovšem zatím nesčítá.

V dnešním díle ji už přinutíme sčítat celá čísla. :-) V Javě je to možné pomocí řízení programu událostmi.

Postup:

  1. Uživatel vyvolá akci například kliknutním na tlačítko
  2. Na tlačítko je přidán posluchač události (event listener) – jedná se o objekt nově vytvořené třídy, do které implementujeme metody
  3. Systém vyvolá metodu a něco se stane

Jdeme tedy postupně na to. Třídu s názvem například EventSoucet vytvoříme v naší třídě Gui, aby měla přístup ke komponentám. Do třídy implementujeme metody ze třídy ActionListener klíčovým slovem implements. IDE by vám mělo rovnou nabídnout implementaci všech metod. Každopádně my to dopíšeme ručně. Třída ActionListener obsahuje jenom jednu bez návratovou metodu - actionPerformed(Ac­tionEvent e). Kód vypadá takto:

public class EventSoucet implements ActionListener {

    public void actionPerformed(ActionEvent e) {

    }

}

Nyní vytvoříme posluchače události - objekt s názvem například soucet. Jedná se tedy o instanci třídy EventSoucet. Dále přidáme posluchače na tlačítko a to jako parametr metody addActionListener. Kód bude vypadat takto:

sectiBut = new JButton("Sečti");
panel1.add(sectiBut);
EventSoucet soucet = new EventSoucet();
sectiBut.addActionListener(soucet);

Vše podstatné máme a teď se už můžeme vrhnout na to, co se má stát, když tlačítko stiskneme. Kód, který se vykoná, je v těle metody actionPerformed(Ac­tionEvent e). Chceme tedy abychom sečetli čísla, která zapíšeme do JTextFieldů. Nejprve však z nich tento text musíme získat. Na to nám slouží metoda getText(). Text který dostaneme je ovšem typu String. Ten sčítat nemůžeme, proto ho musíme přeparsovat na typ Integer.

int prvniCislo = Integer.parseInt(cislo1Field.getText());
int druheCislo = Integer.parseInt(cislo2Field.getText());

Dále už pouze vytvoříme další proměnnou typu int jménem vysledek, která bude součtem těch dvou čísel. No a nakonec musíme někam náš výsledek vypsat. My ho vypíšeme na komponentu vysledekLab a to metodou setText() s parametrem textu, který se na ní má zobrazit.

public class EventSoucet implements ActionListener {

    public void actionPerformed(ActionEvent e) {
        int prvniCislo = Integer.parseInt(cislo1Field.getText());
        int druheCislo = Integer.parseInt(cislo2Field.getText());
        int vysledek = prvniCislo + druheCislo;
        vysledekLab.setText("Výsledek je: " + vysledek);
    }

}

Hlavní metoda zůstává stejná, jenom nastavíme lepší velikost a ukážeme si, jak zamezit roztahování okna. To umožňuje metoda s parametrem boolean (true/ false) okno.setResiza­ble(false).

public static void main(String[] args) {
    Gui okno = new Gui();
    okno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    okno.setVisible(true);
    okno.setSize(220, 120);
    okno.setLocationRelativeTo(null);
    okno.setResizable(false);
}

Jelikož je dost nepraktické vytvářet novou třídu a ještě objekt pro jednu komponentu, používá se většinou jako objekt posluchače anonymní vnitřní třída. Kód to zpřehlední a zjednoduší. Výsledná třída pak vypadá takto:

public Gui()
{
    super("Kalkulačka");
    FlowLayout layout = new FlowLayout();
    setLayout(layout);

    Color barva = new Color(150, 75, 130);

    panel1 = new JPanel();
    panel1.setBackground(Color.red);
    add(panel1);

    panel2 = new JPanel();
    panel2.setBackground(barva);
    add(panel2);

    cislo1Field = new JTextField("1. číslo", 5);
    panel1.add(cislo1Field);

    cislo2Field = new JTextField("2. číslo", 5);
    panel1.add(cislo2Field);

    sectiBut = new JButton("Sečti");
    panel1.add(sectiBut);
    sectiBut.addActionListener(
            new ActionListener(){
                public void actionPerformed(ActionEvent evt) {
                    int prvniCislo = Integer.parseInt(cislo1Field.getText());
                    int druheCislo = Integer.parseInt(cislo2Field.getText());
                    int vysledek = prvniCislo + druheCislo;
                    vysledekLab.setText("Výsledek je: " + vysledek);
                };
            });


    vysledekLab = new JLabel("Výsledek je. ");
    panel2.add(vysledekLab);
}

Výsledné okno vypadá nějak takto:

udalost - Java Swing bez grafického návrháře

Program funguje, pokud zadáme celá čísla.

Ošetření výjimky popíšu hned v příštím tutoriálu, Java GUI. V něm si také kalkulačku rozšíříme o další funkce a ukážeme si práci s další komponentou JComboBox (rozbalovací menu). :-)


 

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 784x (17.17 kB)
Aplikace je včetně zdrojových kódů v jazyce Java

 

Předchozí článek
Java GUI - Základní komponenty
Všechny články v sekci
Java Swing bez grafického návrháře
Přeskočit článek
(nedoporučujeme)
Java GUI
Článek pro vás napsal Samik11
Avatar
Uživatelské hodnocení:
22 hlasů
Autor se věnuje primárně programování v jazyce Java. Nestraní se ani C# nebo PHP.
Aktivity