Dialogová okna
Pokud potřebujeme v aplikaci vytvořit nějaké další okno, zpravidla k tomu nepoužíváme třídu JFrame. Jak jsme uváděli výše, aplikace by měla disponovat jedním framem. Ostatní okna jsou vytvářena formou dialogu. Práce s dialogy je podobná jako s framy. Dialogová okna dělíme do dvou základních skupin:Modální okno je takové okno, které při otevření zůstává neustále navrchu, pře kryje všechna ostatní okna aplikace. Dokud není uzavřeno, znemožňuje práci s jinými okny aplikace. Modální okna se často používají pro dialogy. Nemodální okna tuto vlastnost nemají, lze s nimi pracovat bez omezení. Práce s dialogy je podobná práci s formuláři.
Dialogy jsou vhodné pro nastavování parametrů programu, umožňují uživa teli zareagovat na činnost programu, informují ho o aktuálním stavu programu.
Dialogy lze navrhovat dle vlastní potřeby, můžeme však využívat některé standardizované dialogy.
Předdefnované dialogy. V knihovně Swing lze nalézt řadu předdefnovaných dialogů. Třída JOptionPane obsahuje statické metody, prostřednictvím kterých lze dialogy vyvolávat. Podíváme se na nejčastěji používané dialogy.
JOptionPane.showMessageDialog(JComponent c, String text);
je vytvořen jednoduchý dialog zobrazující zadaný text. V titulku je zobrazen text Message, okno nedisponuje žádnou ikonou.
Okno může mít vlastní titulek, v závislosti na informaci, kterou sděluje; lze v něm zobrazovat několik typů ikon které naznačují charakter okna (informační, výstražné, chybové...). Syntaxe vypadá takto
JOptionPane.showMessageDialog(JComponent c, String text, String nadpis,
int JOptionPane);
Hodnoty konstant jsou uvedeny v nsledující tabulce.
Konstanta | Popis |
PLAIN_MESSAGE | Okno neobsahuje žádnou ikonu, pouze prostý text. |
WARNING_MESSAGE | Výstražné okno |
ERROR_MESSAGE | Chybové okno. |
INFORMATION_MESSAGE | Informační okno. |
Okno s prostým textem, výstražné okno, chybové okno, informační okno.
int s showOptionDialog(Component parent, Object text, String title,
int optionType, int messageType,Icon icon, Object[] options,
Object initialValue);
Metoda obsahuje řadu parametrů, jejich stručný popis je uveden v následující tabulce.
Parametr | Popis |
Component parent | Jméno nadřazené komponenty. |
Object text | Text zobrazený v dialogovém okně. |
String title | Nadpis dialogového okna. |
int optionType | Typ tlačítek, které budou v dialogu zobrazeny. |
int messageType | Typ ikony, která je v dialogu zobrazena. |
Icon icon | Ikona zobrazená ve stavovém řádku okna. |
Object [] options | Popisy jednotlivých tlačítek dialogu. |
Object initialValue | Výchozí hodnota, která může být nastavena (součástí okna může být i combo box) |
Konstanta | Popis |
NO_OPTION | Tlačítko No |
OK_CANCEL_OPTION | Tlačítka OK a Cancel |
OK_OPTION | Tlačítko OK |
YES_NO_CANCEL_OPTION | Tlačítka YES, NO, CANCEL |
YES_NO_OPTION | Tlačítka YES, NO |
CANCEL_OPTION | Tlačítko CANCEL |
YES_OPTION | Tlačítko YES |
Práce s ikonami je stejná jako v případě message dialogu, nebudeme ji proto uvádět. Typy tlačítek zobrazených v dialogu jsou dány konstantou, která může nabývat následujících hodnot.
Ukázka zdrojového kódu:
Object[] options = {"Ano","Ne","Neruš mě"};
int s=JOptionPane.showOptionDialog(this,Máte rádi programování?",
Otázka",JOptionPane.YES_OPTION,JOptionPane.QUESTION_MESSAGE, null,
options, options[2]);
Chceme-li vzhled okna upravit, použijeme jinou variantu přetížené metody showOption Dialog. Tlačítka nemusí mít vlastní popis, lze použít defaultní hodnoty.
"Otázka",JOptionPane.YES_NO_OPTION);
Kombinace českého a anglického jazyka nepůsobí dobře, měli bychom se jí vyhýbat.
Ukázka třetí varianty přetížené metody se dvěma tlačítky:
Object[] opt = {"Ano","Ne"};
int s=JOptionPane.showOptionDialog(this,"Máte rádi programování?",
"Otázka",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE, null,
opt, opt[0]);
Detekce stisknutého tlačítka. Metoda showOptionDialog() vrací kód stisknutého tlačítka. Můžeme tak detekovat, kterým tlačítkem uživatel dialog zavřel.
if (s==JOptionPane.YES_OPTION)
{
//stiskl uzivatel tlacitko YES?
}
Vytvoření vlastního dialogu. Vlastní dialog lze vytvořit jako instanci třídy JDialog. Práce s ním je podobná, jako v případě formulářů, nebudeme ji tedy uvádět. Na dialog můžeme přidávat další komponenty, používat layout managery, atd... Dialogu je možno nastavit modalitu/nemodalitu a to za použití metody setModal(boolean b). Zobrazení dialogu je možné provést metodou setVisible(boolean b). Následující kód vytvoří modální dialog.
JDialog jd=new JDialog();
jd.setTitle(Vlastní dialog);
jd.setModal(true);
jd.setVisible(true)
Autor: Filip Koval