Praha & EU: Investujeme do vaší budoucnosti Evropský sociální fond Gymnázium, Praha 10, Voděradská 2 Projekt OBZORY GUI v Javě úvod
Knihovny pro tvorbu GUI AWT (Abstract Windowing Toolkit) –již v Java 1.0 –sledování událostí postupně upravováno největší rozdíl mezi 1.0 a 1.1 –java.awt –java.awt.event a další podbalíky JFC Swing (Java Foundation Classes) –od verze 1.2 –javax.swing a další podbalíky
Look and feel swingových komponent Aplikace s GUI napsané v Javě pomocí knihovny Swing mohou mít různý vzhled Java na Windows standardně umožňuje tyto : – MetalLookAndFeel –WindowsLookAndFeel –MotifLookAndFeel Existují i vzhledy dodávané dalšími dodavateli
Look and feel swingových komponent MetalLookAndFeelMetalLookAndFeel s rámem Winows XP
MotifLookAndFeelWindowsLookAndFeel Look and feel swingových komponent
Knihovna NimrodKnihovna Nimrod + Windows XP
Nastavení vzhledu aplikace UIManager.setLookAndFeel( ); "com.sun.java.swing.plaf.motif.MotifLookAndFeel" "javax.swing.plaf.metal.MetalLookAndFeel" "com.sun.java.swing.plaf.windows.WindowsLookAndFeel" UIManager.getCrossPlatformLookAndFeelClassName() UIManager.getSystemLookAndFeelClassName () JFrame.setDefaultLookAndFeelDecorated(true); java -Dswing.defaultlaf = com.sun.java.swing.plaf.windows. WindowsLookAndFeel MyApp
Správa umístění komponent v okně java.awt.LayoutManager metoda pro nastavení umístění setLayout() Druhy rozložení –java.awt.FlowLayout –java.awt.GridLayout –java.awt.BorderLayout –javax.swing.BoxLayout –javax.swing.SpringLayout –java.awt.GridBagLayout –java.awt.CardLayout
FlowLayout Implicitní rozložení pro JPanel Komponenty v upřednostňované velikosti jsou řazeny do řádek. Pořadí je určeno pořadím vložení metodou add(). Zarovnání komponent a mezery mezi nimi je možno určit v konstruktoru, např. zarovnání vpravo a mezery 10 pixelů. FlowLayout(FlowLayout.RIGHT, 10, 10)
BorderLayout Implicitní rozložení pro JFrame a JDialog. Plocha rozdělena na 5 částí –PAGE_START (NORTH) –LINE_START (WEST) –CENTER –LINE_END (EAST) –PAGE_END (SOUTH) Při vkládání komponenty určujeme umístění druhým parametrem metody add() např. add(komponenta, BorderLayout.LINE_START) Neuvedení druhého parametru znamená umístění komponenty do oblasti CENTER V každé části je pouze jedna komponenta
BorderLayout Komponenty v horní a dolní oblasti se zobrazují v upřednostňované výšce a šířce podle velikosti okna. Komponenty v levé a pravé oblasti se zobrazují v upřednostňované šířce a výšce podle velikosti okna. Komponenta ve středu zabírá celý zbytek. Pokud je okno malé zmenšuje se tato komponenta. V konstruktoru můžeme určit mezery mezi komponentami.
GridLayout V konstruktoru určujeme počet řádků a sloupců a mezery mezi komponentami. Komponenty jsou všechny stejně velké, rozměry se řídí velikostí okna. Pořadí je určeno pořadím vkládání metodou add().
BoxLayout Uspořádání komponent do jednoho řádku či jednoho sloupce. Toto rozvržení používá maximální velikost komponent. Konstruktor BoxLayout(kontejner,BoxLayout.Y_AXIS) Zarovnání komponenty je určeno nastavením vlastnosti komponenty pomocí metod setAligmentX() a setAligmentY() Pro vytváření mezer mezi komponentami slouží třída javax.swing.Box.
Box prázdná oblast mezi komponentami –createRigidArea() odtlačení komponent co nejdál od sebe –createVerticalGlue() –createHorizontalGlue()
SpringLayout Pracuje na základě popisu vzdáleností mezi jednotlivými komponentami
SpringLayout layout.putConstraint(SpringLayout.WEST, label, 5, SpringLayout.WEST, contentPane); layout.putConstraint(SpringLayout.NORTH, label, 5, SpringLayout.NORTH, contentPane); layout.putConstraint(SpringLayout.WEST, textField, 5, SpringLayout.EAST, label); layout.putConstraint(SpringLayout.NORTH, textField, 5, SpringLayout.NORTH, contentPane); layout.putConstraint(SpringLayout.EAST, contentPane, 5, SpringLayout.EAST, textField); layout.putConstraint(SpringLayout.SOUTH, contentPane, 5, SpringLayout.SOUTH, textField);
GridBagLayout Složitý, ale velmi flexibilní. Jedná se o tabulku s těmito vlastnostmi –určujeme umístění v tabulce –jedna komponenta může zabírat více buněk –pro každou komponentu můžeme nastavit její vlastnosti –pro každý řádek i sloupec můžeme určit výšku a šířku
GridBagLayout Jednoduchý konstruktor GridBagLayout() Pro každou vloženou komponentu existuje instance třídy GridBagConstraints() Vložení komponenty pak probíhá následovně GridBagLayout gbl = new GridBagLayout(); getContentPane().setLayout(gbl); GridBagConstraints omezeni = GridBagConstraints(); getContentPane().add(komponenta1,omezeni);
Kombinování rozložení, panely V jedné instanci třídy JFrame může být nastaven jen jeden správce rozložení Komponentou však nemusí být přímo aktivní prvek GUI, ale instance třídy JPanel. Každý panel (instance třídy JPanel) obsažený v okně může mít nastaveno jiné rozložení. Panel může obsahovat další panely atd.
Skládání panelů s různým rozložením komponent
BoxLayout X FlowLayout BoxLayout Y FlowLayout BorderLayout
Hierarchie komponent (část)
JFrame – okno aplikace
Události v GUI v Javě ActionEvent AdjustmentEvent ComponentEvent ContainerEvent FocusEvent ItemEven t KeyEvent MouseEvent MouseMotionEvent TextEvent WindowEvent ChangeEvent a další
Obsluha událostí Ke každému typu události existuje rozhraní –ActionEvent - ActionListener –WindowEvent - WindowListener K rozhraní s více než jednou metodou existuje třída Adapter implementující všechny metody rozhraní jako prázdné –WindowListener – WindowAdapter Třídy událostí a jejich listenery a adaptery jsou ve dvou balíčcích –java.awt.event –javax.swing.event
Obsluha událostí Každá komponenta má metodu či metody addXxxListener pro určení jaké události sleduje (existuje i metoda removeXxxListener) Jedna komponenta může sledovat více druhů událostí a několik komponent může mít přiřazenou stejnou reakci na událost Pro obsluhu události se používají vnitřní třídy.
Obsluha událostí – průběh volání metod
První jednoduchá aplikace
Kód třídy Start – spuštění aplikace public class Start { public static void main(String[] args) { GUI grafika = new GUI(); grafika.setVisible(true); }
© Jarmila Pavlíčková, KIT, import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; public class GUI { private JFrame okno; private JButton tlacitko; private JLabel navesti; private int pocet = 0; private class ObsluhaTlacitka implements ActionListener { public void actionPerformed(ActionEvent arg0) { pocet++; navesti.setText("Tlačítko bylo stisknuto " + pocet + " krát"); } public GUI() { okno = new JFrame(); okno.setTitle("Jednoducha aplikace"); okno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); okno.getContentPane().setLayout(new FlowLayout()); tlacitko = new JButton("tlačítko"); tlacitko.addActionListener(new ObsluhaTlacitka()); okno.add(tlacitko); navesti = new JLabel("Tlačítko bylo stisknuto " + pocet + " krát"); okno.add(navesti); okno.pack(); } public void setVisible(boolean zobrazit) { okno.setVisible(zobrazit); } private JFrame okno; private JButton tlacitko; private JLabel navesti; private int pocet = 0; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; private class ObsluhaTlacitka implements ActionListener { public void actionPerformed(ActionEvent arg0) { pocet++; navesti.setText("Tlačítko bylo stisknuto " + pocet + " krát"); } okno = new JFrame(); okno.setTitle("Jednoducha aplikace"); okno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); okno.getContentPane().setLayout(new FlowLayout()); tlacitko = new JButton("tlačítko"); tlacitko.addActionListener(new ObsluhaTlacitka()); okno.add(tlacitko); navesti = new JLabel("Tlačítko bylo stisknuto " + pocet + " krát"); okno.add(navesti); okno.pack(); public void setVisible(boolean zobrazit) { okno.setVisible(zobrazit); }
Obsluha události – anonymní vnitřní třída ………. tlacitko = new JButton("tlačítko"); tlacitko.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent arg0) { pocet++; navesti.setText("Tlačítko bylo stisknuto " + pocet + " krát"); } ); okno.add(tlacitko); ……….
Použité zdroje a literatura Developer Resources for Java Technology [online]. c2010 [cit ]. Dostupné z WWW: PAVLÍČKOVÁ, Jarmila; PAVLÍČEK, Luboš. Úvod do Javy. Praha : Nakladatelství Oeconomica, s. ISBN BUCHALCEVOVÁ, Alena, PAVLÍČKOVÁ, Jarmila, PAVLÍČEK, Luboš. Základy softwarového inženýrství – materiály ke cvičení. 1. vyd. Praha : Oeconomica, s. ISBN
Praha & EU: Investujeme do vaší budoucnosti Evropský sociální fond Gymnázium, Praha 10, Voděradská 2 Projekt OBZORY Tato prezentace byla vytvořena v rámci projektu OBZORY Autor: Ing. Jarmila Pavlíčková Předmět: seminář Java Datum: