Grafické uživatelské rozhraní 58 8. Grafické uživatelské rozhraní Až dosud jsme pro výstupy a vstupy do našich programů využívali pouze konzoli nebo soubor. Java nám však poskytuje nástroje pro tvorbu grafického uživatelského rozhraní, tj. "okének", menu, tlačítek atd. Už od první verze Javy je její součástí balík java.awt (abstract window toolkit) poskytující třídy pro tvorbu rozhraní a od verze 1.2 také balík (package) javax.swing. V následujících příkladech budeme využívat především třídy z balíku swing, používání tříd z AWT je velmi podobné. První aplikace Pokud chceme vytvořit aplikaci s grafickým uživatelským rozhraním, prvním krokem je vytvořit rámec („okno“) ve kterém aplikace poběží. V jazyce Java se používá třída JFrame (třída Frame v awt). Následující program ukazuje, jak vytvořit základní rámec aplikace a na obrázku vidíte výsledek. import java.awt.event.*; import javax.swing.*; public class PrvniAplikace extends JFrame { class Wl extends WindowAdapter { public void windowClosing (WindowEvent e) { System.exit(0); } }; public PrvniAplikace(String nazev) { super(nazev); addWindowListener (new Wl()); } public static void main (String []args) { PrvniAplikace apl=new PrvniAplikace("Moje prvni aplikace"); apl.setLocation(100,100); apl.setSize(200,200); apl.setVisible(true); } } Třída PrvniAplikace je potomkem třídy JFrame a obsahuje dvě metody: konstruktor PrvniAplikace a metodu main. Dále v našem programu vytvoříme vnitřní třídu Wl, která je potomkem třídy WindowAdapter a bude obsluhovat události okna (tj. uživatelské akce jako je zmenšení na ikonu, změna velikosti okna nebo zavření okna). Zde je definováno, že při uzavření okna má skončit aplikace – tj. předefinujeme metodu windowClosing() předka, která se volá při uzavření okna.
27
Embed
java.vse.cz - 8. Grafické uživatelské rozhraní...atd. Už od první verze Javy je její součástí balík java.awt (abstract window toolkit) poskytující třídy pro tvorbu rozhraní
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Grafické uživatelské rozhraní
58
8. Grafické uživatelské rozhraníAž dosud jsme pro výstupy a vstupy do našich programů využívali pouze konzoli nebo soubor. Java
nám však poskytuje nástroje pro tvorbu grafického uživatelského rozhraní, tj. "okének", menu, tlačítek
atd. Už od první verze Javy je její součástí balík java.awt (abstract window toolkit) poskytující třídy
pro tvorbu rozhraní a od verze 1.2 také balík (package) javax.swing. V následujících příkladech
budeme využívat především třídy z balíku swing, používání tříd z AWT je velmi podobné.
První aplikacePokud chceme vytvořit aplikaci s grafickým uživatelským rozhraním, prvním krokem je vytvořit
rámec („okno“) ve kterém aplikace poběží. V jazyce Java se používá třída JFrame (třída Frame
v awt). Následující program ukazuje, jak vytvořit základní rámec aplikace a na obrázku vidíte
výsledek.
import java.awt.event.*;import javax.swing.*;
public class PrvniAplikace extends JFrame {
class Wl extends WindowAdapter {
public void windowClosing (WindowEvent e) {System.exit(0);
}};
public PrvniAplikace(String nazev) {super(nazev);addWindowListener (new Wl());
}
public static void main (String []args) {PrvniAplikace apl=new PrvniAplikace("Moje prvni aplikace");apl.setLocation(100,100);apl.setSize(200,200);apl.setVisible(true);
}}
Třída PrvniAplikace je potomkem třídy JFrame a obsahuje dvě
metody: konstruktor PrvniAplikace a metodu main.
Dále v našem programu vytvoříme vnitřní třídu Wl, která je
potomkem třídy WindowAdapter a bude obsluhovat události
okna (tj. uživatelské akce jako je zmenšení na ikonu, změna
velikosti okna nebo zavření okna). Zde je definováno, že při
uzavření okna má skončit aplikace – tj. předefinujeme metodu
windowClosing() předka, která se volá při uzavření okna.
Grafické uživatelské rozhraní
59
Ošetření ostatních události, které vznikají u okna (tzv. WindowEvent) nepřekrýváme – tj. bude se
používat standardní ošetření nadefinované v předkovi. Všimněte si, že třída Wl je nadefinována uvnitř
třídy PrvniAplikace – třídy vytvořené uvnitř jiných tříd se nazývají vnitřní třídy (inner class).
V konstruktoru pomocí vyvolání konstruktoru předka s parametrem tj. příkaz super (String s) přiřadí-
me našemu oknu titulek. Další část konstruktoru, metoda addWindowListener, zajistí, že naše okno
bude reagovat na obsluhu uživatele prostřednictvím třídy Wl (tj. teprve nyní se přiřadí obsluha popsa-
ná ve třídě Wl k našemu oknu).
V metodě main pak vytvoříme instanci třídy PrvniAplikace s názvem "Moje první aplikace", nastaví-
me jí výchozí umístění na obrazovce (metoda setLocation), výchozí velikost (metoda setSize) a
zobrazíme ji na obrazovce (metoda setVisible).
Většina RAD nástrojů pro Javu používá pro popis zavření okna ješte o něco složitější konstrukci
s využitím anonymní vnitřní třídy. Následující program je stejný jako předchozí, pouze pro obsluhu
událostí okna používá anonymní vnitřní třídu. Tato konstrukce bude používána ve všech dalších
programech.
import java.awt.event.*;import javax.swing.*;
public class PrvniAplikace2 extends JFrame {
public PrvniAplikace2(String nazev) {super(nazev);addWindowListener(new WindowAdapter () {
public void windowClosing (WindowEvent e) {System.exit(0);}
});}
public static void main (String [] args) {PrvniAplikace2 apl=new PrvniAplikace2("Moje prvni aplikace");apl.setLocation(100,100);apl.setSize(200,200);apl.setVisible(true);
}}
Vkládání dalších komponentNa následující příkladě si ukážeme, jak do okna aplikace přidat další prvky. Zadání je jednoduché,
přidat do aplikace posuvník a vypisovat, na jakou hodnotu je právě nastaven. Použijeme tedy instanci
private JScrollBar posuvnik;private JLabel napis;private int hodnota = 0;
private class Al implements AdjustmentListener {public void adjustmentValueChanged(AdjustmentEvent e) {
hodnota = posuvnik.getValue();napis.setText("Vybrana hodnota je: "+hodnota);
}};
public PrvniAplikace4(String nazev) {super(nazev);addWindowListener(new WindowAdapter () {
public void windowClosing (WindowEvent e) {System.exit(0);
}});posuvnik= new JScrollBar(JScrollBar.HORIZONTAL,0,1,0,100);posuvnik.addAdjustmentListener (new Al());napis = new JLabel ("Vybrana hodnota je: "+hodnota);getContentPane().add(posuvnik,BorderLayout.NORTH);getContentPane().add(napis,BorderLayout.SOUTH);
}
public static void main (String []args) {PrvniAplikace4 apl= new PrvniAplikace4("Moje prvni aplikace");apl.setLocation(100,100);apl.setSize(200,200);apl.setVisible(true);
}}
Do naší aplikace jsme přidali třídu Al implementující rozhraní
AdjustmentListener, která definuje metodu
adjustmentValueChanged(AdjustmentEvent e). Tato metoda
má jako parametr AdjustmentEvent, tj. událost, kterou generují
instance třídy JScrollBar. V rámci obsluhy události posuvníku
pomocí metody getValue( ) získáme hodnotu nastavenou na
posuvníku a změníme text zobrazovaný popiskou pomocí metody setText(String s). Ani toto však
Grafické uživatelské rozhraní
62
ještě nestačí, posledním krokem je přiřadit v konstruktoru tento listener konkrétní instanci třídy
JScrollBar pomocí metody addAdjustmentListener( ).
Obecně lze tedy říci, že komponentu, kterou chceme přidat do okna aplikace, nejprve deklarujeme
jako datový atribut instance potomka třídy JFrame a přiřadíme mu počáteční hodnotu, tj. vytvoříme
instanci komponenty pomocí konstruktoru. Pak definujeme třídu implementující rozhraní (případně
třídu, která je potomkem příslušného XxxAdapteru) pro obsluhu událostí této komponenty.
Posledním krokem je přiřazení konkrétního "posluchače událostí" konkrétní komponentě pomocí
metody addXxxListener().
Následující tabulky by vám měly umožnit základní orientaci v komponentách, událostech, rozhraních
pro sledování událostí atd.
V tabulce je přehled všech událostí, rozhraní určených pro jejich obsluhu a metod pro přiřazení a
odejmutí těchto ovladačů, v druhém sloupci naleznete seznam komponent, které generují tyto události.
Zatím jsme si vysvětlili, že metoda add() slouží pro přidání komponenty do rámce, ale ne kam budou
komponenty umístěny. Pro určení rozmístění komponent se používají správci rozložení (tzv. layout
manager). Základní správce rozvržení si nyní popíšeme.
Rozložení BorderLayoutToto rozložení je standardně nastaveným rozložením pro
okno aplikace. Z tohoto důvodu jsme v úvodním příkla-
dě žádné rozložení nenastavovali a jen jsme jej použí-
vali.
BorderLayout rozděluje okno aplikace do pěti oblastí
(viz obrázek), přičemž do každé z nich lze vložit pouze
jednu komponentu (může to být instance třídy JPanel, do
které lze vložit další komponenty). Velikost komponenty
závisí na oblasti do které je vložena. Oblasti NORTH, SOUTH, WEST a EAST jsou jen tak velké, aby
bylo možno zobrazit komponentu do nich vloženou. Oblast CENTER pak zabírá celý zbytek okna a
komponenta do ní vložená je roztažena na celou tuto oblast.
V úvodním příkladu jsme umístili posuvník do oblasti North a návěstí do oblasti South.
Rozložení FlowLayoutRozložení FlowLayout, jak již název napovídá, je velmi volné a uspořádání komponent závisí na
velikosti okna. Komponenty se rovnají do řádků v pořadí v jakém je metodou add přidáváte do okna.
Následující obrázky ukazují dva různé vzhledy téže aplikace v závislosti na tom, jak si uživatel nastaví
velikost okna.
Grafické uživatelské rozhraní
65
Rozložení GridLayoutToto rozložení vytváří tabulku o zadaném počtu řádků a sloupců.
Komponenty mají maximální velikost, při které se do okna ještě
vejdou. Zvětší-li uživatel okno, zvětší se komponenty.
Následující obrázek ukazuje aplikaci s GridLayoutem
nastaveným na 3 řádky a 2 sloupce. Komponenty jsou řazeny do
tabulky podle pořadí jejich vložení do okna metodou add a jejich
velikost je určena velikostí okna (mají maximální velikost, při
které se vejdou do okna).
Další rozvrženíV předcházejících podkapitolách jsme si ukázali pouze některé správce rozvržení. Dalším zajímavým
rozložením s největší možností nastavení je GridBagLayout. Toto rozvržení je však příliš složité. Pro
jednoduché aplikace stačí kombinace předcházejících a pro složitější aplikace pravděpodobně
použijete RAD prostředí, které použití layoutu vyřeší za vás.
Dalším rozvržením je CardLayout, pro vytvoření tzv. karet. Ale toto rozložení neposkytuje možnost
vytvořit kartičky s oušky, přepínání mezi kartičkami musíme řešit pomocí tlačítek nebo rozbalovacího
seznamu. Balík javax.swig nám poskytuje třídu JTabbedPane, která tyto problémy řeší za nás.
Kombinování správců rozvrženíJednotlivá rozvržení lze v rámci jedné aplikace kombinovat. Pro kombinování se používají instance
třídy JPanel. Tato třída má stejně jako třída JFrame metody add() a setLayout(), standardním
rozvržením pro panel je ale FlowLayout. Tato komponenta však nemá žádné viditelné ohraničení a lze
ji vložit do instance třídy JFrame nebo opět do instance třídy JPanel. Příklad kombinování layoutů
najdete např. v podkapitole Textová oblast.
Grafické uživatelské rozhraní
66
Nastavení vlastností komponentPro každou komponentu je možné nastavit několik obecných vlastností pomocí metod jejich společné-
ho předka – třídy Component. Některé z nich vidíte v tabulce.
metoda třídy Component popis metodyColor getBackground() Vrátí nastavení barvy pozadí jako instanci třídy Color.void setBackground(Color) Nastaví barvu pozadí komponenty.Color getForeground() Vrátí nastavení barvy popředí jako instanci třídy Color.void setForeground(Color) Nastaví barvu popředí komponenty.Font getFont() Vrátí informace o nastaveném fontu.void setFont(Font) Nastaví font.
Dimension size()Vrátí aktuální velikost komponenty. Lze použít i metodysize().width() a size().height() pro získání každého rozmě-ru zvlášť.
void setVisible(boolean) Skryje nebo zobrazí komponentu na obrazovce.boolean isVisible() Vrátí true nebo false podle nastavení viditelnosti.
void setEnabled (boolean) Zpřístupní či znepřístupní komponentu, při znepřístupněníje komponenta viditelná, ale uživatel ji nemůže použít.
boolean isEnabled () Zjistí stav zpřístupnění
tabulka 22 Vybrané metody třídy Component
Pro komponenty ze swingu existuje i metoda setToolTipText(String s), pomocí které můžeme pro
komponentu nastavit plovoucí nápovědu. Použití těchto metod si ukážeme v následujících kapitolách.
Třída FontPro nastavení vzhledu písma slouží třída Font z knihovny AWT, kterou lze použít ve swingu. Umož-
ňuje nastavit vzhled písma, řez písma a velikost písma.
Pro Javu je definováno 5 logických fontů, jejichž existence je zaručena na všech platformách. Pro
jednotlivé platformy je pak v souboru font.properties uloženo, které fonty reprezentují (soubor
font.properties je uložen v adresáři jre/lib). V následující tabulce jsou uvedena jména logických fontů
a jejich reprezentace ve Windows.
Logický font odpovídající font ve Windows
Serif Times New Roman
Sans-serif Arial
Monospaced Curier New
Dialog Arial
DialogInput Curier New
tabulka 23 Logické fonty Javy a jejich nastavení ve Windows
V konstruktoru fontu je možné použít i název fontu z platformy, na které pracujete, tedy např. Arial
nebo Georgia. Přenositelnost na jiné platformy je však poté problematická.
Pro nastavení řezu písma má třída Font tři konstanty: PLANT, BOLD (tučné) a ITALIC (kurzíva).
Grafické uživatelské rozhraní
67
Konstruktor třídy Font má následující tvar: Font(String name, int style, int size). Chceme-li tedy
definovat pro náš program písmo s logickým fontem Dialog, tučným a o velikosti 20, vytvoříme ho
takto:
Font f1 = new Font ("Dialog",Font.BOLD,20).
Font s písmem Georgia (pokud tento font máte ve svém operačním systému), tučnou kurzívou a
velikostí 14 vytvoříme takto:
Font f2 = new Font ("Georgia",Font.BOLD + Font.ITALIC,14)
Třída ColorTřída Color slouží k nadefinování barvy. Najdeme v ní několik konstant, které můžeme použít. Pokud
např. chceme v aplikaci použít modré tlačítko, nadefinujeme ho pomocí konstanty takto:
JButton tlacitko = new JButton ("Tlacitko");tlacitko.setBackground (Color.blue);
Třída Color má také několik konstruktorů pro "namíchání" vlastních barev. Nejčastěji využijete dva
následující:
Color (int r, int g, int b), kde každý z parametrů je z intervalu 0 až 255
Color (int rgb)
Bílou barvu tedy můžeme "namíchat" takto:
Color barva1 = new Color(255,255,255);Color barva2 = new Color(0xFF,0xFF,0xFF);Color barva3 = new Color(0xFFFFFF);
Tlačítka a textové poleKnihovna Swing nám poskytuje několik různých tlačítek, nejprve si ukážeme "obyčejné" tlačítko, tj.
instanci třídy JButton. V následujícím programu použijeme dvě tlačítka a textové pole. Po stisknutí
tlačítka se v textovém poli zobrazí text, který je na tlačítku.
V konstruktoru tlačítka nastavíme text, který bude na tlačítku
zobrazen, v konstruktoru textového pole (třída JTextField)
nastavíme výchozí velikost (počet znaků, které lze zapsat).
Použijeme FlowLayout a umístíme komponenty. Pro tlačítka
musíme napsat ovladače a nastavit je jako "posluchače událostí". Tlačítko po stisknutí generuje
událost ActionEvent, je tedy nutné napsat vnitřní třídu AkceTlacitko, která implementuje rozhraní
ActionListener. ActionListener obsahuje jedinou metodu actionPerformed (ActionEvent e), ve
které musíme popsat činnost po stisknutí tlačítka. Pomocí metody události e.getSource() získáme
zdroj události. Víme, že je to tlačítko, a tak ho přetypujeme (JButton)e.getSource(). Nakonec
použijeme metodu getText(), která nám vrátí text zobrazovaný na tlačítku. Pomocí metody instance
třídy JTextField setText() zobrazíme tento text v textovém poli. Pro každé tlačítko můžeme napsat
jinou implementaci ActionListeneru. V našem příkladě je činnost obou tlačítek shodná, stačí tedy
public class TextovaOblast extends JFrame {JPanel zahlavi = new JPanel();JLabel textZadej = new JLabel ("Zadej soubor: ");JTextField zadejSoubor = new JTextField(20);JTextArea vypis = new JTextArea();
class Kl extends KeyAdapter {public void keyPressed (KeyEvent e) {
if (e.getKeyChar()==KeyEvent.VK_ENTER) {zpracovani(zadejSoubor.getText());zadejSoubor.setText("");
}}
};
void zpracovani(String jmenoSouboru) {try {
BufferedReader veta = new BufferedReader(newFileReader(jmenoSouboru));
String s = "";vypis.setForeground(Color.black);vypis.setText("");while ((s = veta.readLine()) != null){
JCheckBox tucne = new JCheckBox ("Tu čně");JCheckBox kurziva = new JCheckBox ("Kurzíva");JRadioButton cerna = new JRadioButton(" Černá");JRadioButton cervena = new JRadioButton(" Červená");JRadioButton modra = new JRadioButton("Modrá");JRadioButton zelena = new JRadioButton("Zelená");ButtonGroup skupinaTlacitek = new ButtonGroup();JPanel panelTlacitek = new JPanel();JTextField text = new JTextField("Zkušební text");Font f1 = new Font ("Dialog",Font.PLAIN,20);Font f2 = new Font ("Dialog",Font.BOLD,20);Font f3 = new Font ("Dialog",Font.ITALIC,20);Font f4 = new Font ("Dialog",Font.BOLD+Font.ITALIC,20);
class NastavModrou implements ActionListener {public void actionPerformed (ActionEvent e) {
text.setForeground(Color.blue);}
};
class NastavCernou implements ActionListener {public void actionPerformed (ActionEvent e) {
text.setForeground(Color.black);}
};
class NastavCervenou implements ActionListener {public void actionPerformed (ActionEvent e) {
text.setForeground(Color.red);}
};
class NastavZelenou implements ActionListener {public void actionPerformed (ActionEvent e) {
text.setForeground(Color.green);}
};
class ZmenaPisma implements ActionListener {public void actionPerformed(ActionEvent e){
public static void main (String args[]) {RuznaTlacitka a = new RuznaTlacitka("Aplikace s tla čítky");a.setLocation(100,100);a.setSize(400,200);a.setVisible(true);
}}
Rozbalovací seznamDalší komponenta, jejíž použití si ukážeme, je rozbalovací
seznam, pro který má knihovna swing třídu JComboBox.
JComboBox umožňuje vytvořit seznam více položek a vybrat
z nich právě jednu. Nabídka seznamu se rozvine po stisknutí
ovládací šipky.
Následující program umožní změnit barvu pozadí aplikace podle
výběru z rozbalovacího seznamu. Třída JComboBox má
konstruktor, který nastaví jednotlivé možnosti nabídky z pole
řetězců. Proto si připravíme pole s jednotlivými texty nabídek a pole s odpovídajícími barvami.
Grafické uživatelské rozhraní
74
Vytvoříme instanci třídy JComboBox a přidáme ji do okna aplikace a nastavíme barvu pozadí podle
seznamu (pokud neurčíte jinak bude vybrána první možnost).
Také instance třídy JComboBox generují ActionEvent. Je tedy třeba napsat ovladač implementující
ActionListener a přiřadit ho rozbalovacímu seznamu pomocí addActionListener.
V ovladači je třeba zjistit, která volba byla vybrána, pomocí metody getSelectedIndex(). Tato metoda
vrací index (pořadí) vybrané volby, první volba má index 0. Na základě indexu zvolíme položku
z pole barev a použijeme ji k nastavení barvy aplikace. Odkaz na aplikaci se zapíše pomocí konstrukce
RozbalovaciSeznam.this. Pouhé this nestačí, neboť jsme uvnitř vnitřní třídy a this tu označuje tuto
vnitřní třídu. Nakonec musíme aplikaci znovu zobrazit s novou barvou.
public void windowClosing (WindowEvent e) {System.exit(0);
}});getContentPane().add(vyber,BorderLayout.NORTH);vyber.addActionListener(new Al());vyber.setSelectedIndex(5);int index = vyber.getSelectedIndex();this.getContentPane().setBackground(konstanty[index]);
}
Grafické uživatelské rozhraní
75
public static void main (String []args) {
RozbalovaciSeznam apl = new RozbalovaciSeznam("Aplikace srozbalovacim seznamen");
JMenuBar lista = new JMenuBar();JMenu soubor = new JMenu("Soubor");JMenu format = new JMenu("Formát");JMenu napoveda = new JMenu ("Nápov ěda");JMenu barvy = new JMenu("Barvy");JMenuItem otevrit = new JMenuItem("Otev řít");JMenuItem ulozit = new JMenuItem("Uložit");JMenuItem konec = new JMenuItem("Konec");JMenuItem oAplikaci = new JMenuItem ("O aplikaci");JCheckBoxMenuItem tucne = new JCheckBoxMenuItem("Tu čné");JCheckBoxMenuItem kurziva = new
JCheckBoxMenuItem("Kurzíva");JRadioButtonMenuItem modra = new
JRadioButtonMenuItem("Modrá");JRadioButtonMenuItem cerna = new
JRadioButtonMenuItem(" Černá");JRadioButtonMenuItem cervena = new
JRadioButtonMenuItem(" Červená");JRadioButtonMenuItem zelena = new
JRadioButtonMenuItem("Zelená");ButtonGroup skupina = new ButtonGroup();JTextField text = new JTextField("Zkušební text");JTextArea souborAAdresar = new JTextArea();Font f1 = new Font("DialogInput",Font.PLAIN,20);Font f2 = new Font ("DialogInput",Font.BOLD,20);Font f3 = new Font ("DialogInput",Font.ITALIC,20);Font f4 = new Font ("DialogInput",Font.BOLD+Font.ITALIC,20);
class VyberSouboru implements ActionListener {public void actionPerformed (ActionEvent e) {
JFileChooser fc = new JFileChooser();int stavVyberu = fc.showOpenDialog(RuznaMenu.this);if (stavVyberu ==JFileChooser.APPROVE_OPTION){
public static void main(String[] args) {RuznaMenu apl = new RuznaMenu("Aplikace s menu");apl.setLocation(100, 100);apl.setSize(400, 400);apl.setVisible(true);
}}
Okna pro otevírání a ukládání souborůPro otevírání a ukládání souboru poskytuje knihovna swing třídu JFileChooser. V minulém programu
s menu byly volby Soubor-Otevrit a Soubor-Ulozit. Pro jejich obsluhu byly napsány ovladače
implementující ActionListener. V jejich metodě actionPerformed je popsáno základní použití oken pro
otevírání a ukládání souborů. Vytvoříme tedy instanci třídy JFileChooser a pomocí metody
showOpenDialog() či showSaveDialog() otevřeme příslušné okno. Jako parametr vložíme odkaz na
aplikaci, která okno otevírá (opět je nutná konstrukce jménonadřízenétřídy.this, pouhé this odkazuje
na ovladač, ne na aplikaci). Do proměnné stavVyberu se vrátí informace o tom, jak uživatel dialog
ukončil. Pokud je vrácena hodnota odpovídající konstantě APPROVE_OPTION, uživatel vybral
soubor, pokud se rovná konstantě CANCEL_OPTION, uživatel akci stornoval. Pomocí metody
getSelectedFile() získáme uživatelem vybraný soubor (jako instanci třídy File) metoda
getCurrentDirectory() vrací vybraný adresář (jako instanci třídy File). Pokud nebyl soubor nebo
adresář vybrán vracejí metody hodnotu null. Toto okno je standardně nastaveno jako modální tj.
uživatel musí reagovat na toto okno, hlavní okno aplikace je neaktivní a nelze se do něj přepnout.
V ovladači našeho programu pouze zobrazujeme jméno vybraného souboru a adresáře.
class VyberSouboru implements ActionListener {public void actionPerformed (ActionEvent e) {
JFileChooser fc = new JFileChooser();int stavVyberu = fc.showOpenDialog(RuznaMenu.this);if (stavVyberu ==JFileChooser.APPROVE_OPTION){
JMenuBar mb = new JMenuBar();JMenuIte m m = new JMenuItem("Formát");JLabel napis1 = new JLabel ("prvni karticka");JCheckBox tucne = new JCheckBox ("Tu čne");JCheckBox kurziva = new JCheckBox ("Kurzíva");JPanel panel1 = new JPanel();Font f1 = new Font("Dialog",Font.PLAIN,20);Font f2 = new Font ("Dialog",Font.BOLD,20);Font f3 = new Font ("Dialog",Font.ITALIC,20);Font f4 = new Font ("Dialog",Font.BOLD+Font.ITALIC,20);JLabel napis2 = new JLabel ("druha karticka");JRadioButton cerna = new JRadioButton(" Černá");JRadioButton cervena = new JRadioButton(" Červená");JRadioButton modra = new JRadioButton("Modrá");JRadioButton zelena = new JRadioButton("Zelená");ButtonGroup skupinaTlacitek = new ButtonGroup();JPanel panel2 = new JPanel();JTabbedPane tabbedPane = new JTabbedPane();JTextField text = new JTextField("Zkusebni text");
class NastavModrou implements ActionListener {public void actionPerformed (ActionEvent e) {
text.setForeground(Color.blue);}
};
class NastavCernou implements ActionListener {public void actionPerformed (ActionEvent e) {
text.setForeground(Color.black);}
};
class NastavCervenou implements ActionListener {public void actionPerformed (ActionEvent e) {
text.setForeground(Color.red);}
};
class NastavZelenou implements ActionListener {public void actionPerformed (ActionEvent e) {
text.setForeground(Color.green);}
};
Grafické uživatelské rozhraní
83
class ZmenaPisma implements ActionListener {public void actionPerformed(ActionEvent e){
public static void main (String []args) {Karticky apl = new Karticky("Aplikace s karti čkami");apl.setLocation(100,100);apl.setSize(200,200);apl.setVisible(true);
}}
Další komponenty GUIUkázali jsme si použití pouze některých komponent, které nám Java v knihovnách AWT a swing
nabízí. Další zajímavé komponenty jsou např.
• JToolBar – pro tvorbu panelů nástrojů
• JProgressBar – pro sledování průběhu akce např. načítání souboru
• JDialog – pro vytvoření dalšího okna v aplikaci s libovolným obsahem
Pro tvorbu rozsáhlého uživatelského rozhraní je výhodné použít tzv. RAD (rapid aplication
development) nástroje jako jsou pro Javu např. NetBeans, Forte, JBuilder nebo Visual Java.