GUI v Javě

Z MiS
(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
(Textová pole, tlačítka: Doplnění metod textového pole)
(Dodány LayoutManagery a zpracování události tlačítka)
Řádka 1: Řádka 1:
 
[[Category:VSE]]
 
[[Category:VSE]]
 +
[[Category:Škola]]
 
[[Category:Informatika]]
 
[[Category:Informatika]]
 
[[Category:Programování]]
 
[[Category:Programování]]
Řádka 6: Řádka 7:
 
Následující poznámky jsou jen velmi stručnou osnovou. Možností při vytváření grafického rozhraní je mnohem více. Pokud chcete více než jen minimalistický návod, doporučuji:
 
Následující poznámky jsou jen velmi stručnou osnovou. Možností při vytváření grafického rozhraní je mnohem více. Pokud chcete více než jen minimalistický návod, doporučuji:
 
[http://download.oracle.com/javase/tutorial/uiswing/ tutoriál ze stránek Oracle.com]
 
[http://download.oracle.com/javase/tutorial/uiswing/ tutoriál ze stránek Oracle.com]
 +
 +
 +
  
 
== Vytvoření okna ==
 
== Vytvoření okna ==
Řádka 35: Řádka 39:
 
Vložení komponenty do okna
 
Vložení komponenty do okna
 
* <code>getContentPane().add(Component komponentaVOkne)</code>
 
* <code>getContentPane().add(Component komponentaVOkne)</code>
** vloží do okna komponentu. Pokud chceme mít komponent v okně více, je třeba je uspořádat pomocí [[GUI v Javě#Layout Manager | „layout manageru“]].
+
** vloží do okna komponentu.  
 +
** se základními komponentami a třídami, které je realizují, se seznámíte v odstavci [[GUI v Javě#Textová pole, tlačítka | Textová pole, tlačítka]].
 +
** Pokud chceme mít komponent v okně více, je třeba je uspořádat pomocí [[GUI v Javě#Layout Manager | „layout manageru“]].
  
 
=== Příklad ===
 
=== Příklad ===
 
* Vytvořte aplikaci s oknem, které půjde přesunovat, minimalizovat a při jehož zavření se aplikace ukončí.
 
* Vytvořte aplikaci s oknem, které půjde přesunovat, minimalizovat a při jehož zavření se aplikace ukončí.
 
* V titulním pruhu bude zobrazen text „Hello world!“.
 
* V titulním pruhu bude zobrazen text „Hello world!“.
 +
 +
 +
  
 
== Textová pole, tlačítka ==
 
== Textová pole, tlačítka ==
Řádka 58: Řádka 67:
 
**: <code>JButton tlStart = new JButton("Start");</code>
 
**: <code>JButton tlStart = new JButton("Start");</code>
 
* reakci na stisk tlačítka nastavíme [[#Zpracování událostí, posluchač | přiřazením posluchače viz dále]]
 
* reakci na stisk tlačítka nastavíme [[#Zpracování událostí, posluchač | přiřazením posluchače viz dále]]
 +
* <code>String getText()</code>
 +
** vrací popis tlačítka.
  
 
=== <code>JLabel</code> ===
 
=== <code>JLabel</code> ===
Řádka 72: Řádka 83:
 
* <code>setText(String text)</code>
 
* <code>setText(String text)</code>
 
** nastaví do textového pole zadaný text
 
** nastaví do textového pole zadaný text
 +
* <code>setEditable(boolean lzeUpravovat)</code>
 +
** nastaví, zda do textového pole lze psát, nebo zda je šedivé a úpravy jsou zakázány.
  
 
Pokud potřebujete z textového pole načíst číslo, můžete použít následující metodu:
 
Pokud potřebujete z textového pole načíst číslo, můžete použít následující metodu:
Řádka 98: Řádka 111:
 
* Vytvořte okno s jediným tlačítkem.
 
* Vytvořte okno s jediným tlačítkem.
 
* Na tlačítku bude text „Superokno!“
 
* Na tlačítku bude text „Superokno!“
 +
 +
 +
  
 
== Zpracování událostí, posluchač ==
 
== Zpracování událostí, posluchač ==
 +
* Pro zpracování událostí prvků GUI (tlačítek, textových polí,...) používá Java [[Návrhový vzor Posluchač | návrhový vzor Posluchač (Listener)]].
 +
 +
=== Postup zpracování události tlačítka ===
 +
# uživatel klikne na tlačítko
 +
# objekt reprezentující tlačítko ''vygeneruje událost'' (event)
 +
#: prakticky vytvoří novou instanci třídy <code>ActionEvent</code>), která nese podrobnější informace (které tlačítko myši bylo stisknuto, na jakých souřadnicích,...
 +
# objekt reprezentující tlačítko událost pošle všem svým „posluchačům“ (posluchači jsou objekty, které splňují rozhraní (interface) <code>ActionListener</code>)
 +
##: prakticky se „poslání události“ realizuje tak, že tlačítko zavolá metodu <code>actionPerformed(ActionEvent e)</code>, kterou předepisuje rozhraní <code>ActionListener</code>. Jako parametr metody se předá objekt události
 +
# posluchač provede akci, která se má provést
 +
##: programátor tedy akci popíše v kódu metody <code>actionPerformed(ActionEvent e)</code> v posluchači
 +
 +
=== Aby bylo možné na stisk tlačítka reagovat, musíme: ===
 +
# mít třídu posluchače (interface <code>ActionListener</code>)
 +
# vytvořit instanci třídy posluchače
 +
# zaregistrovat instanci třídy posluchače u tlačítka.
 +
 +
=== <code>class ActionEvent</code> ===
 +
* <code>public Object getSource()</code>
 +
** vrací objekt, který událost vyvolal. V našem případě instanci třídy <code>JButton</code>, reprezentující tlačítko, které bylo stisknuto.
 +
** je potřeba provést [[Přetypování | přetypování]] z <code>Object</code> na <code>JButton</code>.
 +
 +
=== <code>interface ActionListener</code> ===
 +
* <code>public void actionPerformed(ActionEvent e)</code>
 +
** v této metodě popíšeme, co se má stát při stisku tlačítka
 +
 +
=== Příklad ===
 +
* Přidejte k tlačítku z příkladu v předchozím odstavci reakci.
 +
* Při stisku tlačítka se do textového výstupu programu opíše text z popisu tlačítka.
 +
 +
  
 
== Layout Manager ==
 
== Layout Manager ==
 +
* Použijeme, když chceme do okna umístit více než jednu komponentu.
 +
* Instance třídy LayoutManager, resp. jejích dceřinných tříd.
 +
 +
=== Nejběžnější třídy layout managerů v Javě ===
 +
* FlowLayout
 +
** Nejjednodušší layout manager.
 +
** Umisťuje prvky jeden za druhý do řádků v takovém pořadí, v jakém jsou přidány.
 +
* GridLayout
 +
** umisťuje komponenty do pravidelné mřížky M×N.
 +
** počet řádků a počet sloupců zadáváme jako parametry konstruktoru při vytváření instance třídy GridLayout.
 +
** pokud některý z parametrů konstruktoru zadáme nulový, pak je počet řádků resp. sloupců neomezený.
 +
** při přidávání komponent se mřížka zaplňuje zleva a shora.
 +
* BorderLayout
 +
** umisťuje komponenty do oblastí North, South, East, West a Center.
 +
** při zvětšování a zmenšování okna se zvětšuje a zmenšuje oblast Center, ostatní zůstávají pokud možno stejně veliké.
 +
** přidávání komponent: <code>panel.add(tlacitko, BorderLayout.EAST)</code>
 +
 +
=== Třídy <code>JFrame</code> ===
 +
 +
=== Příklad ===
 +
* Přidejte k předchozímu příkladu dvě textová pole s popiskami (label) „Originál“ a „Kopie“.
 +
* Textové okno s popisem „Kopie“ nebude editovatelné.
 +
* Tlačítko upravte tak, že na něm bude popis „Kopíruj“.
 +
* Při stisknutí tlačítka se text z pole „Originál“ zkopíruje do pole „Kopie“.
 +
* Při stisku tlačítka se do textového výstupu programu opíše text z popisu tlačítka.

Verze z 7. 7. 2011, 15:35


Následující poznámky jsou jen velmi stručnou osnovou. Možností při vytváření grafického rozhraní je mnohem více. Pokud chcete více než jen minimalistický návod, doporučuji: tutoriál ze stránek Oracle.com



Obsah

Vytvoření okna

Třída JFrame:

Vlastnosti okna

Velikost okna

Zobrazení okna

Vkládání komponent do okna

Vložení komponenty do okna

Příklad



Textová pole, tlačítka

Do okna vkládáme součásti (komponenty). Komponenty jsou potomky třídy JComponent.

Nejběžnější komponenty jsou:

Je-li komponent v okně mnoho, můžeme je uspořádat na

JButton

JLabel

JTextField

Pokud potřebujete z textového pole načíst číslo, můžete použít následující metodu:

   /**
    * Získá číslo z textového pole
    *
    * @param textovePole Textové pole, jehož hodnota se má převést na číslo
    * @return Vrátí hodnotu čísla, zapsaného v textovém poli.
    *     Pokud text v poli nelze převést na číslo (pole je prázdné apod.),
    *      vrátí 0
    *      a navíc do textového pole zapíše výzvu k vložení čísla.     */
   private int ziskejCislo(JTextField textovePole) {
       int vysledek;
       try {
           vysledek = Integer.parseInt(textovePole.getText());
       } catch (NumberFormatException e) {
           textovePole.setText("Nastavte platné číslo!");
           vysledek = 0;
       }
       return vysledek;
   }

Příklad



Zpracování událostí, posluchač

Postup zpracování události tlačítka

  1. uživatel klikne na tlačítko
  2. objekt reprezentující tlačítko vygeneruje událost (event)
    prakticky vytvoří novou instanci třídy ActionEvent), která nese podrobnější informace (které tlačítko myši bylo stisknuto, na jakých souřadnicích,...
  3. objekt reprezentující tlačítko událost pošle všem svým „posluchačům“ (posluchači jsou objekty, které splňují rozhraní (interface) ActionListener)
    1. prakticky se „poslání události“ realizuje tak, že tlačítko zavolá metodu actionPerformed(ActionEvent e), kterou předepisuje rozhraní ActionListener. Jako parametr metody se předá objekt události
  4. posluchač provede akci, která se má provést
    1. programátor tedy akci popíše v kódu metody actionPerformed(ActionEvent e) v posluchači

Aby bylo možné na stisk tlačítka reagovat, musíme:

  1. mít třídu posluchače (interface ActionListener)
  2. vytvořit instanci třídy posluchače
  3. zaregistrovat instanci třídy posluchače u tlačítka.

class ActionEvent

interface ActionListener

Příklad


Layout Manager

Nejběžnější třídy layout managerů v Javě

Třídy JFrame

Příklad

Osobní nástroje
Jmenné prostory
Varianty
Akce
Výuka
Navigace
Nástroje