GUI v Javě
Z MiS
(Rozdíly mezi verzemi)
(→Layout Manager: Doplněny metody) |
(Vkládání komponent do okna přidáno k povídání o komponentách v okně.) |
||
Řádka 31: | Řádka 31: | ||
* <code>setVisible(boolean maBytViditelne)</code> | * <code>setVisible(boolean maBytViditelne)</code> | ||
** Zobrazí nebo zneviditelní okno. | ** Zobrazí nebo zneviditelní okno. | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
=== Příklad === | === Příklad === | ||
Řádka 62: | Řádka 51: | ||
* panely (<code>JPanel</code>). | * panely (<code>JPanel</code>). | ||
− | === <code>JButton</code> === | + | === Třída <code>JButton</code> === |
* <code>JButton(String popisTlacitka)</code> | * <code>JButton(String popisTlacitka)</code> | ||
** text na tlačítku zadáme jako parametr konstruktoru | ** text na tlačítku zadáme jako parametr konstruktoru | ||
Řádka 70: | Řádka 59: | ||
** vrací popis tlačítka. | ** vrací popis tlačítka. | ||
− | === <code>JLabel</code> === | + | === Třída <code>JLabel</code> === |
* <code>JLabel(String textPopisu)</code> | * <code>JLabel(String textPopisu)</code> | ||
** text popisky zadáme jako parametr konstruktoru | ** text popisky zadáme jako parametr konstruktoru | ||
Řádka 76: | Řádka 65: | ||
* 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>JTextField</code> === | + | === Třída <code>JTextField</code> === |
* <code>JTextField(int pocetZnaku)</code> | * <code>JTextField(int pocetZnaku)</code> | ||
** volitelným parametrem konstruktoru je délka pole, vyjádřená početem znaků, které do pole vlezou. | ** volitelným parametrem konstruktoru je délka pole, vyjádřená početem znaků, které do pole vlezou. | ||
Řádka 107: | Řádka 96: | ||
} | } | ||
</code> | </code> | ||
+ | |||
+ | === Vkládání komponent do okna === | ||
+ | * Abychom komponentu zobrazili, musíme ji umístit do některého okna. | ||
+ | * Seskládání okna obvykle provádíme v soukromé metodě <code>initComponents()</code> okna, kterou pro tento účel vytvoříme. | ||
+ | * Pokud chceme mít komponent v okně více, je třeba je uspořádat pomocí [[GUI v Javě#Layout Manager | „layout manageru“]]. | ||
+ | |||
+ | === Třída <code>JFrame</code> === | ||
+ | * <code>getContentPane().add(Component komponentaVOkne)</code> | ||
+ | ** vloží do okna komponentu. | ||
=== Příklad === | === Příklad === | ||
Řádka 116: | Řádka 114: | ||
== 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 | + | * Pro zpracování událostí prvků GUI (tlačítek, textových polí,...) používá Java [[Návrhový vzor Pozorovatel | návrhový vzor Pozorovatel (Observer)]]. |
=== Postup zpracování události tlačítka === | === Postup zpracování události tlačítka === |
Verze z 7. 7. 2011, 16:30
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
:
- realizuje okno s titulním pruhem a tlačítky.
Vlastnosti okna
-
setTitle(String titulek)
- nastavuje titulek okna (text v titulním pruhu).
-
setDefaultCloseOperation(int akce)
- říká co se bude dít při stlačení zavíracího tlačítka.
- naše aplikace většinou mají jediné okno, chceme tedy, aby se při zavření okna zavřela celá aplikace.
- k tomu slouží konstanta JFrame.EXIT_ON_CLOSE.
Velikost okna
-
pack()
- zmenší velikost okna tak, aby se do něj vlezly komponenty, které jsou aktuálně v okně.
Zobrazení okna
-
setVisible(boolean maBytViditelne)
- Zobrazí nebo zneviditelní okno.
Příklad
- 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!“.
Textová pole, tlačítka
Do okna vkládáme součásti (komponenty). Komponenty jsou potomky třídy JComponent
.
Nejběžnější komponenty jsou:
- tlačítka (
JButton
), - textová pole (
JTextField
), - popisky (
JLabel
).
Je-li komponent v okně mnoho, můžeme je uspořádat na
- panely (
JPanel
).
Třída JButton
-
JButton(String popisTlacitka)
- text na tlačítku zadáme jako parametr konstruktoru
-
JButton tlStart = new JButton("Start");
-
- text na tlačítku zadáme jako parametr konstruktoru
- reakci na stisk tlačítka nastavíme přiřazením posluchače viz dále
-
String getText()
- vrací popis tlačítka.
Třída JLabel
-
JLabel(String textPopisu)
- text popisky zadáme jako parametr konstruktoru
-
JLabel lCisloA = new JLabel("Zadejte číslo A:");
-
- text popisky zadáme jako parametr konstruktoru
- reakci na stisk tlačítka nastavíme přiřazením posluchače viz dále
Třída JTextField
-
JTextField(int pocetZnaku)
- volitelným parametrem konstruktoru je délka pole, vyjádřená početem znaků, které do pole vlezou.
-
String getText()
- vrací aktuální text v textovém poli
-
setText(String text)
- nastaví do textového pole zadaný text
-
setEditable(boolean lzeUpravovat)
- 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:
/** * 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; }
Vkládání komponent do okna
- Abychom komponentu zobrazili, musíme ji umístit do některého okna.
- Seskládání okna obvykle provádíme v soukromé metodě
initComponents()
okna, kterou pro tento účel vytvoříme. - Pokud chceme mít komponent v okně více, je třeba je uspořádat pomocí „layout manageru“.
Třída JFrame
-
getContentPane().add(Component komponentaVOkne)
- vloží do okna komponentu.
Příklad
- Vytvořte okno s jediným tlačítkem.
- Na tlačítku bude text „Superokno!“
Zpracování událostí, posluchač
- Pro zpracování událostí prvků GUI (tlačítek, textových polí,...) používá Java návrhový vzor Pozorovatel (Observer).
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
ActionEvent
), která nese podrobnější informace (které tlačítko myši bylo stisknuto, na jakých souřadnicích,...
- prakticky vytvoří novou instanci třídy
- 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
)- 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
- prakticky se „poslání události“ realizuje tak, že tlačítko zavolá metodu
- posluchač provede akci, která se má provést
- programátor tedy akci popíše v kódu metody
actionPerformed(ActionEvent e)
v posluchači
- programátor tedy akci popíše v kódu metody
Aby bylo možné na stisk tlačítka reagovat, musíme:
- mít třídu posluchače (interface
ActionListener
) - vytvořit instanci třídy posluchače
- zaregistrovat instanci třídy posluchače u tlačítka.
class ActionEvent
-
public Object getSource()
- vrací objekt, který událost vyvolal. V našem případě instanci třídy
JButton
, reprezentující tlačítko, které bylo stisknuto. - je potřeba provést přetypování z
Object
naJButton
.
- vrací objekt, který událost vyvolal. V našem případě instanci třídy
interface ActionListener
-
public void actionPerformed(ActionEvent e)
- 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
- 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:
panel.add(tlacitko, BorderLayout.EAST)
Třídy JFrame
a JPanel
-
void setLayout(LayoutManager lm)
- nastaví panelu nebo oknu daný layout manager
-
void add(Component komponenta[, umisteni])
- přidá další komponentu do okna.
- některé layout managery vyžadují další informaci o umístění komponenty v okně.
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.