© 2013 All rights reserved.
7

Java a základy GUI #2

V předchozí části jsme si ukázali základy vytváření GUI v Javě. Vysvětlili jsme si základní pojmy, seznámili jsme se se základními třídami, které budeme implementovat a používat a seznámili jsme se s Layout Managery. Navíc jsme si vytvořili dva základní jednoduché grafické interface, na kterých jsme si ukázali základní použití.
V tomto následujícím díle se zaměříme na rozšíření znalostí ohledně ovládacích prvků, ukážeme si kromě tlačítka JButtonu navíc ještě další grafické prvky a začneme se základy obsluhy událostí.

Pokud jste si vyzkoušeli ukázkový příklad, který jsme udělali v minulém díle na konci, určitě vám vadilo, že se okno vytvořilo v rohu vašeho monitoru. Nejprve se tedy zaměříme na tento problém.

Proto, abychom umístili okno na určité souřadnice, musíme nejprve zjistit, jaké maximální souřadnice můžeme použít. To uděláme jednoduše:

Vznikla nám proměnná obrazovka, typu Dimension, ve které jsou uloženy maximální souřadnice plochy (obrazovka.width, obrazovka.height ).

Pro nastavení souřadnic nám poslouží funkce setLocation, do které vstupují dva parametry. Jak jinak než souřadnice X, Y.

Pomocí tohoto příkazu umístíme okno do jedné čtvrtiny obrazovky. Do souřadnic se zarovnává levý horní roh okna.

V minulém díle jsme si ukázali pouze základy co se týkalo grafických prvků na stránce. S tlačítkem JButton bychom si vystačili maximálně u opravdu jednoduchého programu. Nyní si ukážeme další grafické prvky, které postupně doplníme do našeho okna.

JLabel

JLabel vytvoří popisek. V závěru se projevuje jako text, který je umístěný v okně aplikace. Použít jej můžeme jak pro jednoduché oznamování uživateli až po její pravý význam, popis tlačítek. Použití je velice jednoduché, stejně jako u všech ostatních prvků.

Nejprve vytvoříme novou instanci a následně přidáme do containeru. Jeden parametr určuje text, který bude popisek obsahovat:

Popřípadě můžete použít rovnou zápis:

JTextField

Textové pole JTextField je jednoduché vstupní pole, které můžeme libovolně umístit do okna aplikace.
Nejprve si ukážeme použití:

JTextField má dva vstupní parametry, první značí defaultní hodnotu, kterou bude textové pole obsahovat, druhý parametr je délka pole.

U JTextField se vám budou dále hodit dvě další metody: GetText a SetText. Použití je jistě zřejmé:

Tento příklad nejprve vytvoří textové pole, do kterého posléze vloží text „string“ a nakonec obsah pole vypíše.

JCheckBox

Checkbox je klasické zaškrtávací tlačítko:

JCheckBox má dva vstupní parametry. První z nich je popisek tlačítka. Tento popisek se zobrazí za tlačítkem a většinou označuje hodnotu, kterou získáme jeho zatržením. Druhý parametr je hodnota True/False a značí zatržení.

Opět vás zřejmě budou zajímat metody pro zjištění a nastavení hodnoty. Jedná se o metody SetSelected, pomocí níž lze nastavit zatřžení, a metoda GetSelected, pomocí níž zjistíme hodnotu zatřžení:

Příklad nejprve nastaví tlačítko na neaktivní a potom vypíše false.

JComboBox

Combobox je klasický rozbalovací select, který obsahuje několik položek (items). Hned zezačátku zmíním alespoň jednu metodu – AddItem, pomocí které můžete přidávat další prvky. Všechno bude patrné z tohoto příkladu:

Opět zmíním několik metod, které budou užitečné pro nastavování a zjištění hodnot u ComboBoxu.

  • setSelectedIndex: nastaví, který index bude aktivní. Vstupní parametr je číselná hodnota indexu. Indexy jsou číslovány od nuly.
  • getSelectedIndex: vrací vybraný index jako číselnou hodnotu
  • getSelectedItem: vrací hodnotu vybraného prvku.

Příklad nejprve nastaví jako aktivní druhý prvek (druhý, protože se indexuje od nuly), potom vypíše vybraný index: 1 a nakonec vypíše hodnotu vybraného prvku: druha.

Ovládacích prvků je samozřejmě celá řada a není možné je tady zmínit podrobně všechny. Ovšem použití všech ostatních je obdobné jako ty, které jsme si ukázali.

Události

Pokud máme vytvořený formulář, musíme nějak zařídit abychom jej mohli zpracovávat. Potřebujeme tedy formulář nějakým způsobem odeslat.

V tomto díle si ukážeme pouze základy událostí a pro naše účely budeme potřebovat implementovat třídu ActionListener.

Dále je potřeba doplnit import knihoven:

a doplnit metody, definované v Interface. Prázdná třída bude potom vypadat takto:

Vidíte, že jsme si vytvořili metodu actionPerformed, která je implementována pomocí rozšířeného interface. Tato metoda bude zpracovávat událost po kliknutí na tlačítko, které si vytvoříme.

V ukázce budeme mít textové pole typu JTextField, ve kterém bude text. Vytvoříme si další textové pole typu JTextArea a jedno tlačítko pro odeslání.

Po kliknutí na tlačítko se nám překopíruje text z textového pole do TextArey.

Navíc budeme kontrolovat, zda není text příliš dlouhý, abychom si příklad trochu rozšířili.
Nejprve tedy vytvoříme tlačítko:

A nyní to nejdůležitější. Musíme na tlačítko přiřadit, aby se po kliknutí zavolala metoda actionPerformed(). To uděláme velmi jednoduše:

Abychom mohli přistupovat k textovému poli a TextArey v jiné metodě, je nutné vytvořit tyto proměnné jako globální, nebo je popřípadě předávat metodě.

Nyní už stačí pouze dopsat metodu pro zpracování:

Pokud jste vše udělali stejně jako já, měl by vám vzniknout funkční formulář podobný tomuto:

Nakonec si ukážeme celý zdrojový kód:

 

Mohlo by vás zajímat:

Java a základy GUI#1
Java a základy GUI#3
Java a základy GUI#4

Comments are closed for this page

A co kdyby jstem mel vice buttonu a chtel by jsem aby mi kazdy spoustel jinou metodu?

Moznosti je nekolik. Metoda addActionListener ocekava objekt, ktery implementuje "ActionListener". Nejcasteji se pouzivaji vnitrni tridy.
public class MyClass {

private static class MyOtherClass implements ActionListener {
}

}

Dalsi moznosti je odchytavat zdroj celeho tlacitka a zjistovat o ktere jde, k cemuz muze slouzit metoda setActionCommand().

V dalsim dile se tomu budu venovat.

No konecne pochopitelny vysvetleni Javy. Jen tak dal. Diky.

Nejlepší je, když chci, aby mi okno s GUI vyskočilo v prostředku dát někam do inicializace

this.setLocationRelativeTo(null); // spusti aplikaci do prostred obrazovky

A co kdybych chtel napozicovat JTextField? Nejak se mi to nedari…. Tlacitka mam kde chci, ale ve chvili, kdy pridam JTextField tak se to cele nahaza na 1. radek….

Marek

.Ahoj kdyz to zkousim na mi to dava chybu:.
class does not have a main method

Diky za pomoc.

About
Hi, i am programmer from the Czech Republic. I love web development (Ruby, Ruby on Rails, PHP, Nette) and iOS development (Objective-C, Cocoa).
To cooperate, here is my phone:
+420 608 836