Grafické rozhraní. Grafické rozhraní. Základní pravidla pro návrh GUI. Princip GUI aplikace. Úvod do tvorby GUI aplikací.



Podobné dokumenty
Při studiu tohoto bloku se předpokládá, že student je zvládá základy programování v jazyce Java s využitím vývojového prostředí NetBeans.

Java GUI události. Událostmi řízené programování. Zpracování = obsluha událostí

GUI - úvod. V této kapitole si ukážeme návod, jak vytvořit jednoduchou grafickou aplikaci a umístit do ní některé další grafické prvky.

Aplikace s grafickým uživatelským rozhraním

8. Grafické uživatelské rozhraní

Grafické uživatelské rozhraní v Javě. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

JAVA GUI Java, zimní semestr

Obsah přednášky. GUI v Javě a událostmi řízené programování. Základní prvky grafického rozhraní. Základní komponenty.

Grafické uživatelské rozhraní v Javě. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

Java, grafické uživatelské rozhraní 2. Layout managery. Okno a kontejner

Obsah přednášky. GUI v Javě a událostmi řízené programování. Základní prvky grafického rozhraní. Základní komponenty.

GUI v Javě a událostmi řízené programování

GUI v Javě (připomínka) Návrhář GUI Příklad aplikace MVC Model-View-Controller Události Vnitřní třídy. MVC Model-View-Controller

GUI v Javě a událostmi řízené programování

GUI v Javě a událostmi řízené programování

01_Grafické rozhraní

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

GUI v Javě. GUI v Javě GUI komponenty a kontejnery Dialogová okna Události a obsluha událostí z GUI

GUI v Javě. Jiří Vokřínek. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze. Přednáška 5 B0B36PJV Programování v JAVA

Swing. Přehled komponent. Java UI, letní semestr 2017/2018 1

8. GRAFICKÉ UŽIVATELSKÉ ROZHRANÍ

Grafické uživatelské rozhraní GUI event-driven programming událostmi řízené programování

Diplomová práce Plugin do Eclipse pro tvorbu GUI s konfigurovatelným generováním zdrojového kódu

2 Tvorba interaktivních grafických programů

GUI v Javě. Jiří Vokřínek. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze. Přednáška 5 B0B36PJV Programování v JAVA

Tvorba grafického uživatelského rozhraní v BlueJ

Události. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

SWT & MigLayout. Alternativy Java GUI v praxi. Pavel Janečka & Tomáš Chlouba. červen 2011

Část I Příklad - Generické typy, iterátor

Java - Kresba. 2/28/11 1/8 Java - kresba

Část I Příklad - Generické typy, iterátor

GUI v Javě. Jan Faigl. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze. Přednáška 3 A0B36PR2 Programování 2

Programování v jazyku Java GUI, události

Inovace výuky prostřednictvím ICT v SPŠ Zlín, CZ.1.07/1.5.00/ Vzdělávání v informačních a komunikačních technologií

GUI v Javě. Jan Faigl. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze. Přednáška 3 A0B36PR2 Programování 2

Microsoft Office. Word styly

Java - výjimky. private void vstup() throws IOException {... }

Tabulky Word egon. Tabulky, jejich formátování, úprava, změna velikosti

GUI v Jav a událostmi ízené programování

Projekty pro výuku programování v jazyce Java

Třídy a objekty -příklady

Seznámení s AWT: práce s okny, grafikou a textem

Word Josef Pecinovský. podrobný průvodce

František Hudek. květen ročník

GUI. JavaFX. Java UI, letní semestr 2017/2018 1

16. února 2015, Brno Připravil: David Procházka

20. Projekt Domácí mediotéka

Sada 2 Microsoft Word 2007

Obsah. Úvod 13 Komu je kniha určena 13 Konvence použité v knize 14 Zpětná vazba od čtenářů 14 Errata 15

JAVA V GUI Java, zimní semestr

APLIKACE V JAZYCE JAVA OVLÁDANÉ PŘES WWW

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Principy objektově orientovaného programování

Technologie JavaBeans

Úloha 1. Text úlohy. Vyberte jednu z nabízených možností: NEPRAVDA. PRAVDA Úloha 2. Text úlohy

Windows 10 (6. třída)

JAVA JavaBeans Java, letní semestr

JAVA JavaBeans Java, letní semestr 2018

Přístupový systém VX800N. Vid

Java pro programátory.net

Iterator & for cyklus

Bridge. Známý jako. Účel. Použitelnost. Handle/Body

Vektorový grafický editor

JAVA. GUI v std knihovně. Java, letní semestr

Operační systém teoreticky

Mobilní aplikace pro ios

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

František Hudek. březen ročník

Úvod do programovacích jazyků (Java)

Abstraktní třída a rozhraní

Abstraktní datové typy: zásobník

Virtuální přístroje. Použití grafického programování v LabVIEW. Ing. Pavel Mlejnek

JAVA UI. Programování uživatelských rozhraní v Javě. Java UI, letní semestr 2017/2018 1

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Java pro programátory.net

Ministerstvo pro místní rozvoj. podprogram

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

VIII. Seminář Java VIII p.1/36

Obsah Úvodem 11 Začít se dá i s málem 11 Abychom si rozuměli 12

Pohyb v listu. Řady a posloupnosti

DUM 06 téma: Základní nástroje

Inovace výuky prostřednictvím šablon pro SŠ

Výukový materiál zpracován v rámci projektu EU peníze školám

Klíčová slova: OOP, konstruktor, destruktor, třída, objekt, atribut, metoda

Vývoj desktopových aplikací v Jazyce Java s bohatým grafickým uživatelským rozhraním.

Základní grafika. Princip zobrazování obsahu. Grafický kontext. Zobrazovací metody. Přednáška 3

Střední průmyslová škola strojnická Olomouc, tř.17. listopadu 49

Špičková fotopast s FULL HD kamerou

Teoretické minimum z PJV

Mediator motivace. FontDialog. závislosti mezi jednotlivými ovládacími prvky jsou netriviální

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

RMI Remote Method Invocation

Windows 8 - základy práce. Obsah: Úvodní obrazovka. Poslední aktualizace článku: 03/04/2015

JAVA Unit testing Java, zimní semestr

GUI. Systémová integrace pro desktopové aplikace

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ

Klientský portál leasing24.cz. KLIENTSKÝ PORTÁL 24 NÁVOD NA PŘIHLÁŠENÍ A REGISTRACI UŽIVATELE Leasing24.cz. Stránka 1 z 15

Protlak Výuková příručka Fine s. r. o. 2010

V týmové spolupráci jsou komentáře nezbytností. V komentářích se může např. kolega vyjadřovat k textu, který jsme napsali atd.

Tvorba trendové funkce a extrapolace pro roční časové řady

Transkript:

Přednáška 2 Grafické rozhraní Grafické rozhraní GUI (Graphics User Interface) nezávislé na zařízení nezávislé na OS (s ohledem na multiplatformnost progr. j. Java) Komponenty (vizuální i nevizuální) 2 rozhraní AWT (Abstract Window Toolkit) Úvod do tvorby GUI aplikací malá rychlost komponenty závislé na prostředí JFC (Java Foundation Class) Java Beans (nevizuální komponenty) Swing (vizuální komponenty) To nás bude zajímat 1 Přednáška 2 2 Princip GUI aplikace Komponenty Komunikace mezi komponentami Událostmi řízené programování Události Smyčka obsluhující frontu zpráv (událostí, většinou vyvolaných zásahem uživatele) Obslužné kódy událostí (handlery) Problematika vláken a vícevláknových aplikací Asynchronní programování, lze použít i obecně (ne jen pro GUI aplikace) Základní pravidla pro návrh GUI Intuitivní ovládání Dodržování běžných zvyklostí uživatelů dle povahy aplikace dle zkušenosti uživatele dle zvyklostí v jednotlivých OS Prostředí se přizpůsobuje uživateli (ne naopak) Jednotný vzhled aplikací v balíku Použití vhodných rozvržení Jednoduše, přehledně, efektivně, střídmě (barvy, fonty, rozměry) Uživatel musí mít stále přehled, kde se nachází (u více otevřených formulářů) Často je hodnocení aplikace založeno (nesprávně) jen na kvalitě vzhledu Přednáška 2 3 Přednáška 2 4

Základní komponenty Hierarchie komponent v aplikaci java.awt.container javax.swing.jcomponent Většina používaných komponent Top-Level componenty (JFrame, JDialog) Kontejnerové komponenty (JPanel, JScrollPane, JToolbar, JSplitPane, ) Základní komponenty (listy) Swing Controls (JButton, JLabel, JRadioButton, JCheckBox, JTextArea, JTextField, JScrollBar, JComboBox, JMenu, JList, JProgressBar ) Interaktivní (editovatelné) komponenty Informativní (needitovatelné) komponenty Přednáška 2 5 Přednáška 2 6 Vzhled komponent Zobrazení okna statická třída UIManager UIManager.setLookAndFeel (UIManager.getSystemLookAndFeelClassName()); UIManager.setLookAndFeel (UIManager.getCrossPlatformLookAndFeelClassName()); Použití před zobrazením formuláře import java.awt.flowlayout; import javax.swing.jbutton; import javax.swing.jframe; public class MainFrame extends JFrame { JButton btn1, btn2; MainFrame () { settitle("příklad zobrazení okna"); setlayout(new FlowLayout()); btn1 = new JButton("Tlačítko 1"); add(btn1); btn2 = new JButton("Tlačítko 2"); add(btn2); Poznámky: Nastavení zobrazení může být v konstruktoru Aplikace funguje, ale nic nedělá Na rozmístění tlačítek má vliv použitý Layout Bez Layoutu bude druhé tlačítko přes celé okno setsize(300,100); public static void main (String[] args) { new MainFrame().setVisible(true); Komponenty lze přidávat i pomocí getcontentpane().add(button1); Možnost přizpůsobení velikosti okna obsahu pomocí pack(); Přednáška 2 7 Přednáška 2 8

Reakce na událost public class MainFrame extends JFrame { JButton btnpocitadlo; JLabel jlabelpocetstisknuti; static int pocitadlo = 0; MainFrame () { btnpocitadlo = new JButton("Zvyš stav počítadla"); add(btnpocitadlo); jlabelpocetstisknuti = new JLabel("Stav počítadla: 0"); btnpocitadlo.add(new () { public void (ActionEvent e) { buttonpocitadloactionperformed(e); ); add(jlabelpocetstisknuti); Princip fungování konceptu událostí Události vytváří (vysílá) uživatel (prostřednictvím ovládací komponenty) program systém Z hlediska programování je to objekt Jiný objekt je zachycuje (posluchač, listener) Zachycovat může pouze objekt s implementovaným rozhraním Listener, kterého si vysílající objekt zaregistruje private void buttonpocitadloactionperformed(actionevent e) { pocitadlo++; jlabelpocetstisknuti.settext("stav počítadla: " + pocitadlo); Přednáška 2 9 Přednáška 2 10 Jiný způsob implementace rozhraní Události, rozhraní a metody (1) public class MainFrame extends JFrame implements { JButton btnpocitadlo; JLabel jlabelpocetstisknuti; static int pocitadlo = 0; MainFrame () {... btnpocitadlo = new JButton("Zvyš stav počítadla"); btnpocitadlo.add(this); add(btnpocitadlo); jlabelpocetstisknuti = new JLabel("Stav počítadla: 0"); add(jlabelpocetstisknuti);. public void (ActionEvent e) { pocitadlo++; jlabelpocetstisknuti.settext("stav počítadla: " + pocitadlo); Implicitní akce Událost ActionEvent Rozhraní () Změna stavu komponenty Událost ComponentEvent Rozhraní ComponentListener componenthidden() componentmoved() componentresized() componentshown() Změna zaměření komponenty Událost FocusEvent Rozhraní FocusListener focusgained() focuslost() Změna stavu okna Událost WindowEvent Rozhraní WindowListener windowactivated() windowclosed() windowclosing() windowdeactivated() windowopened() Změna zaměření okna Událost WindowFocusEvent Rozhraní WindowFocusListener windowfocusgained() windowfocuslost() Přednáška 2 11 Přednáška 2 12

Události, rozhraní a metody (2) Ukončení programu 1 Práce s klávesnicí Událost KeyEvent Rozhraní KeyListener keypressed() keyreleased() keytyped() Práce s tlačítky myši Událost MouseEvent Rozhraní MouseListener mouseclicked() mouseentered() mouseexited() mousepressed() mousereleased() Pohyb myši Událost MouseMotionEvent Rozhraní MouseMotionListener mousemotiondragged() mousemotionmoved() Práce s rolovacím kolečkem myši Událost MouseWheelEvent Rozhraní MouseWheelListener mousewheelmoved() btnkonec = new JButton("Konec"); btnkonec.add((){ public void (ActionEvent e) { buttonkonecactionperformed(e); ); private void buttonkonecactionperformed(actionevent e) { if (JOptionPane.showConfirmDialog(this, "Zprava", "Dotaz", 0)==0) dispose(); Poznámky: dispose() skryje okno a uvolní jeho zdroje, funguje pro hlavní a jediné okno aplikace System.exit(0); //správné řešení Přednáška 2 13 Přednáška 2 14 Ukončení programu 2 Fokus a viditelnost Použití Adaptéru pro zaregistrování posluchače není potřeba implementovat všechny metody rozhraní adaptér je již obsahuje, mají prázdné tělo implementuje se pouze požadovaná metoda addwindowlistener(new WindowAdapter() { public void windowclosing (WindowEvent e) { System.exit(0); ); Klasické chování okna zjistí v konstruktoru setdefaultcloseoperation(exit_on_close); nebo v návrháři nastavení vlastnosti DefaultCloseOperation. setvisible (boolean b) po vytvoření okna pro komponenty se o viditelnost stará rodičovská komponenta (kontejner) boolean isvisible () setenabled (boolean b) boolean isenabled () Fokus vlastnost komponenty přijímat vstup od uživatele aktivní komponenta void requestfocus() chování závisí na prostředí OS boolean requestfocusinwindow() boolean isfocusowner() Přednáška 2 15 Přednáška 2 16

Metrika komponent Udávána v pixelech Souřadnice levého horního rohu = [0, 0] [0, 0] [width-1, height-1] x height Rozložení komponent layout manager Správce umístění stará se o rozmístění komponent na rodičovském kontejneru Poloha: Point (int x, int y) setlocation(point p); setlocation(int x, int y); Velikost: Dimension (int width, int heigh) setsize (Dimension d); setsize (int width, int height); Pravoúhlá oblast: Rectangle (int x, int y, int width, int height) SetBounds (Rectangle r); SetBounds (int x, int y, int width, int height); y width java.awt.layoutmanager FloatLayout GridLayout BorderLayout GridBagLayout CardLayout GroupLayout (Free Design) Přednáška 2 17 Přednáška 2 18 Layout manager GroupLayout Nastavení zvoleného rozložení z prostředí Využívání při návrhu z IDE inteligentní zarovnávání přichytávání možnost nastavení škálovatelných komponent kódem setlayout(new BorderLayout()); add(new Button ("OK"), BorderLayout.CENTER); add(new Button ("1"), BorderLayout.WEST; add(new Button ("2"), BorderLayout.EAST); setlayout (new FlowLayout(FlowLayout.CENTER, 5, 5)); setlayout (new FlowLayout()); Přednáška 2 19 Přednáška 2 20

Prostředí NetBeans Přehled společných vlastností komponent Color background, Color foreground Font font String text float alignmentx, float alignmenty int verticalalignment, int horizontalalignment Point location int x, int y Size size int width, int height boolean enabled boolean visible String name... Přednáška 2 21 Přednáška 2 22 JLabel JButton Komponenta pro statické zobrazení textu a/nebo obrázku (ikony) Možnost zarovnání: LEFT, RIGHT, CENTER, LEADING, TRAILING Nastavení barvy pozadí (background) a textu (foreground) Konstruktory JLabel () JLabel (String text); JLabel (String text, int alignment); JLabel (Icon i); JLabel (Icon i, int alignment); JLabel (String text, Icon i, int alignment); Metody Nejpoužívanější komponenta, běžně pro spouštění akcí Označení textem a/nebo obrázku, možnost zarovnání, nastavení barvy, ohraničení (border) JButton (String text); JButton (Icon i); JButton (String text, Icon i); int getverticalalignment (); setverticalalignment (int alignment); int getverticalalignment (); setverticalalignment (int alignment); int gethorizontalalignment (); sethorizontalalignment (int alignment); Vybrené rozhraní a metody ItemListener itemstatechanged() Přednáška 2 23 Přednáška 2 24

JCheckBox Zaškrtávací pole, logická vlastnost selected (true/false), Označení textem a/nebo obrázku, možnost zarovnání, nastavení barvy, ohraničení (border) JRadioButton Přepínač, obdoba checkboxu, logická vlastnost selected (true/false), Může fungovat samostatně nebo ve skupině (pouze jeden přepínač ve skupině může být zaškrtnutý) JCheckBox (String text); JCheckBox (String text, boolean selected); + varianty s Icon JRadioButton (String text); JRadioButton (String text, boolean selected); + varianty s Icon boolean isselected (); setselected (boolean selected) boolean isselected (); setselected (boolean selected); ItemListener itemstatechanged ItemListener itemstatechanged Přednáška 2 25 Přednáška 2 26 ButtonGroup JTextField Slouží pro sdružení přepínačů (radiobutton) do skupiny ButtonGroup (); remove (AbstractButton button); add (AbstractButton button); ButtonModel getselection (); setselected (ButtonModel bm, boolean state); Enumeration <AbstractButton> getelements (); int getbuttoncount (); boolean isselected (ButtonModel bm); Jednořádkový textový vstup, ukončení zadávání klávesou ENTER Možnost nastavení pouze pro čtení, barvy pozadí, barvy textu, použitého fontu, ohraničení, vyznačení části textu, Délka zadávaného textu nesouvisí se šířkou editačního pole JTextField (); JTextField (String text); boolean geteditable(); seteditable (boolean editable) FocusListener focusgained(), focuslost() KeyListener keypressed(), KeyReleased(), keytyped() Přednáška 2 27 Přednáška 2 28

JTextArea JComboBox Víceřádkové zobrazení editovatelného textu, slouží pro vstup i výstup Obsah uložen jako String Použití posuvníků Formátování obsahu do řádků (vložení znaku \n do textu), volitelné zalamování JTextArea (); JTextArea (String text); JTextArea (String text, int rows, int columns); settext (String s); String gettext (); append (String str); insert (String strm int pos); seteditable (boolean editable), boolean iseditable (); setcolumns (int columns); int getcolumns (); setraws (int raws); int getraws (); setlinewrap (boolean wrap); boolean getlinewrap (); setwrapstyleword (boolean word); boolean getwrapstyleword (); Přednáška 2 29 Kombinace editačního boxu a rozbalovacího seznamu Možnost přidávání položek za běhu programu, možnost modifikace vlastní položky Položky jsou objekty s metodou tostring(), přístup přes indexy JComboBox (); JComboBox (Object[] items); JComboBox (ComboBoxModel amodel); additem (Object obj); insertitemat (Object obj, int index); removeitemat (int index); Object getitemat (int index); int getitemcount (); int getselectedindex (); Object getslecteditem (); setselectedindex (int index), int getitemcount (); boolean iseditable (); seteditable (boolean editable) FocusListener focusgained(), focuslost() Přednáška 2 30 JList Víceřádkový seznam s trvalým rozbalením (zobrazení) Dle počtu položek je použit posuvník Možnost výběru pouze jedné položky, souvislého intervalu nebo více položek Práce s položkami (inicializace, přidávání, odebírání, modifikace) pomocí DefaultListModel JList (); JList (Object[] listdata); JList (ListModel datamodel); getmodel.add (int pos, String str); getmodel.set (int pos, String str); getmodel.remove (int pos); getmodel.clear (); int getmodel.getsize (); setselectedmode (int selsctionmode); setselectedindex (int index); setselectedindices (int indices); int getselectedindex (); int [] getselectedindices (); boolean isselectionempty (); clearselection (); ListSectionMode: SINGLE_SELECTION, SINGLE_INTERVAL_SELECTION, MULTIPLE_INTERVAL_SELECTION JPanel Kontejner pro vkládání dalších komponent (dle nastaveného layout manageru) Barva pozadí, okraje, použití DoubleBufferingu Vhodný pro kreslení JPanel (); JPanel (boolean isdoublebuffered); JPanel (LayoutManager layout); JPanel (LayoutManager layout, boolean isdoublebuffered); add (Component comp); remove (Component comp); getcomponent setborder (Border border); // NoBorder, BevelBorder, EtchedBorder, LineBorder, TitledBorder, boolean isdoublebuffered (); setdoublebuffered (boolean doublebuff); boolean isfocusable (); mouseclicked, mouseentered, mouseexited, MouseListener mousepressed,mousereleased MouseMotionListener mousemotiondragged, mousemotionmoved Přednáška 2 31 Přednáška 2 32