Swing GUI aplikace, události, komponenty, vlákna, postupy



Podobné dokumenty
Aplikace s grafickým uživatelským rozhraním

GUI. Systémová integrace pro desktopové aplikace

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

JAVA Unit testing Java, zimní semestr

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

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.

Vláknové programování část V

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

JAVA GUI Java, zimní semestr

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

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

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

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

Java a XML. 10/26/09 1/7 Java a XML

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 - ú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.

Obrázek 6.14: Prohlížec nápovedy

Principy objektově orientovaného programování

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

Programování v Javě I. Únor 2009

Technologie JavaBeans

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

Typický prvek kolekce pro české řazení

Programování v Javě I. Leden 2008

Typ 2 - připojení prostřednictvím kódu nativního klienta pro přístup k síti

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

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

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

ANT. Aplikační programování v Javě (BI-APJ) - 1 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

Programátorská příručka

RMI Remote Method Invocation

KTE / ZPE Informační technologie

PREPROCESOR POKRAČOVÁNÍ

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

1. Téma 12 - Textové soubory a výjimky

BlueJ a základy OOP. Programování II 1. cvičení Alena Buchalcevová

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

Distribuované systémy a výpočty

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

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

20. Projekt Domácí mediotéka

5 Rekurze a zásobník. Rekurzivní volání metody

APNVZ_2. Vzor Model view controller, Observer

Distribuované systémy a výpočty

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

public class Karel { private int position; public boolean issmiling; public int getposition() { return position;

Teoretické minimum z PJV

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

Iterator & for cyklus

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

Objektově orientované programování

UJO Framework. revoluční architektura beans. verze

Semin aˇr Java V yjimky Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Unor 2008 Radek Koˇc ı Semin aˇr Java V yjimky 1/ 25

Abstraktní datové typy: zásobník

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

Čipové karty Lekařská informatika

Jazyk C# (seminář 6)

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

Petr Aubrecht. Gerstner Laboratory,

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

Java a Caché IV: Manipulace s objekty

public static void main(string[] args) { System.out.println(new Main().getClass().getAnnotation(Greet.class).text());

Vlákno odlehčený proces kód vlákna, zásobník privátní ostatní sdíleno s dalšími vlákny téhož procesu

George J. Klir. State University of New York (SUNY) Binghamton, New York 13902, USA

Webové služby a XML. Obsah přednášky. Co jsou to webové služby. Co jsou to webové služby. Webové služby a XML

Třídy a objekty -příklady

Pokročilé programování na platformě Java. Úvod

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

Příklad aplikace Klient/Server s Boss/Worker modelem (informativní)

Soubor jako posloupnost bytů

Úvod do programovacích jazyků (Java)

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

Struktura třídy, operátory, jednoduché algoritmy, junit. Programování II 2. cvičení Alena Buchalcevová

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 3.4.

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

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

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

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

Java Výjimky Java, zimní semestr

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

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

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

Kapitola 1. Stromy 1.1. Základní informace

Z. Kotala, P. Toman: Java ( Obsah )

Vytváření a použití knihoven tříd

Návrhové vzory Design Patterns

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

Zapouzdření. Tomáš Pitner, upravil Marek Šabo

NIO. Aplikační programování v Javě (BI-APJ) - 12 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

Obsah přednášky. Technologie. Enterprise Java Beans. Enterprise Java Beans. EJB kontejner. Enterprise Java Beans (EJB)

8. GRAFICKÉ UŽIVATELSKÉ ROZHRANÍ

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

Algoritmizace a programování

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

Michal Podzimek

Java Enum Java, zimní semestr ,2017 1

GUI. Systémová integrace pro desktopové aplikace

Část 1 Paralelní programování. Vícevláknové aplikace. Část 2 Vícevláknové aplikace. Část 3 Využití vláken v GUI

Vícevláknové aplikace modely a příklady

Transkript:

Swing GUI aplikace, události, komponenty, vlákna, postupy Tomáš Pitner Masarykova univerzita, Fakulta informatiky Swing GUI PV168

Cíle přednášky, co nás bude zajímat Událostmi řízené programování Vlákna: principy a nástroje ve Swingu Základní komponenty Model 1 a MVC ve Swingu Swing budování GUI aplikací v Javě

Co je Swing? Prostředí (knihovny, komponenty, POSTUPY) pro psaní javových aplikací běžících na klientských počítačích (desktopových aplikací) a majících grafické uživatelské rozhraní (GUI). Swing je nadstavbou nad AWT. Existují i nadstavby nad Swing a rámce pro něj např. SWT, SAF. Swing budování GUI aplikací v Javě

Možnosti oproti AWT Kromě základních komponent obsahuje i složitější komponenty - tabulka (JTable), strom (JTree) Umožňuje měnit vzhled a chování aplikací prostřednictvím tzv. Look and Feel Podporuje pomocné technologie pro nevidomé jako jsou screen readery nebo Braillovy displeje (viz Java Accessibility) Podporuje snadné programování 2D grafiky (viz Java2D) Podporuje technologii Drag and Drop Podporuje snadné vytváření i18n a l10n aplikací. Swing možnosti a výhody

Balíky Swingu javax.accessibility javax.swing.plaf javax.swing.text javax.swing javax.swing.plaf.basic javax.swing.text.html javax.swing.border javax.swing.plaf.metal javax.swing.text.html.parser javax.swing.colorchooser javax.swing.plaf.multi javax.swing.text.rtf javax.swing.event javax.swing.plaf.synth javax.swing.tree javax.swing.filechooser javax.swing.table javax.swing.undo Swing balíčky v java Core API

Info ke Swingu Tutoriál na java.sun.com - http://java.sun.com/docs/books/tutorial/uiswing/ Swing Book zdarma - http://www.javafaq.nu/java-allbooks-8.html Publikace na O Reilly Safari - http://safari.oreilly.com (MU má momentálně přístupnou knihu Java Swing 2 nd Edition - http://proquest.safaribooksonline.com/0596004087) Eckel, B. Thinking in Java, http://www.mindview.net/books/tij Swing informace, knihy, tutoriál

Balíky Swingu javax.accessibility javax.swing.plaf javax.swing.text javax.swing javax.swing.plaf.basic javax.swing.text.html javax.swing.border javax.swing.plaf.metal javax.swing.text.html.parser javax.swing.colorchooser javax.swing.plaf.multi javax.swing.text.rtf javax.swing.event javax.swing.plaf.synth javax.swing.tree javax.swing.filechooser javax.swing.table javax.swing.undo Swing balíčky v java Core API

Start aplikace nad Swing Můžeme si zvolit vzhled (Look & Feel) Potom začneme programově vytvářet komponenty GUI Inicializace GUI je třeba provádět ve vlákně dispečera událostí, nikoli v hlavním vlákně. Zajistíme pomocí SwingUtilities.invokeLater

Volba Look and Feel Možnost nastavit základní schéma vzhledu, resp. obsluhy podle: javových zvyklostí zvyklostí konkrétního OS tzn. jako nativní aplikace public static void main(string[] args) { try { UIManager.setLookAndFeel( UIManager.getCrossPlatformLookAndFeelClassName()); catch (Exception e) { // Create and show the GUI...

Sestavení GUI import javax.swing.*; public class HelloWorldSwing { private static void createandshowgui() { JFrame frame = new JFrame("HelloWorldSwing"); frame.setdefaultcloseoperation(jframe.exit_on_close); JLabel label = new JLabel("Hello World"); frame.getcontentpane().add(label); frame.pack(); frame.setvisible(true); public static void main(string[] args) { javax.swing.swingutilities.invokelater(new Runnable() { public void run() { createandshowgui(); );

Sestavení GUI

Ukončení swingové aplikace Pokud má aplikace více vláken, ukončí se až když se ukončí všechna vlákna (s výjimkou vláken s nastaveným příznakem daemon), nebo když je zavolána metoda System.exit(int). Protože vlákno message dispatcheru běží v nekonečné smyčce, aplikace běží dokud není aplikace ukončena voláním této metody. Tuto metodu je možné volat buď přímo, nebo je možné pomocí metody JFrame.setDefaultCloseOperation(int) typicky na hlavním okně zajistit její automatické zavolání při zavření tohoto okna. Petr Adámek, kore/wiki/index.php/swing

Událostmi řízené programování Základní koncept řízení toku programu nad Swing Událostmi se rozumí akce uživatele prostřednictvím periférií (myš, klávesnice,...) nad komponentami GUI nízkoúrovňové události Vysokoúrovňové události jsou druhotné vytvořené komponentami Události (tedy jejich popisy) se řadí do fronty message dispatcheru Ošetření (reakce na událost) se neprovádí v hlavním vlákně aplikace Nemělo by trvat dlouho Dlouhé výpočty je třeba delegovat do jiných vláken (SwingWorker) Petr Adámek, kore/wiki/index.php/swing

Ošetření události Vytvořit tzv. posluchače (EventListener), který bude na danou událost reagovat. Posluchač se pak musí zaregistrovat jako příjemce události u příslušné komponenty.

Ošetření události // Vytvoříme instanci tlačítka JButton button = new Jbutton("Moje"); // Vytvoříme posluchače události ActionListener actionlistener = new ActionListener() { public void actionperformed(actionevent e) { // Zobrazíme box s informací o stisknutí tlačítka JOptionPane.showMessageDialog(null,"Stisknuto tlačítko:" + e.getactioncommand()); ; // Zaregistrujeme posluchače u kompon., kde se událost generuje button.addactionlistener(actionlistener);

Kód měnící GUI Musí být spuštěn ve vláknu message dispatcheru, protože metody ve Swing nejsou jinak synchronizovány. Týká se i prvotní konstrukce GUI (hlavní okno, menu,...) i změn např. zneviditelnění tlačítka, položky menu Lze provést pomocí SwingUtilities

Spouštění ve vlákně message dispatcheru Metoda invokelater - spustí ve vlákně message dispatcheru asynchronně (ne hned a nečeká na ukončení run()) Signatura: public static void invokelater(runnable dorun) Runnable dohelloworld = new Runnable() { public void run() { System.out.println("Hello World on "+ Thread.currentThread()); ; SwingUtilities.invokeLater(doHelloWorld); System.out.println("This might well be displayed before the other message.");

Spouštění ve vlákně message dispatcheru Metoda invokeandwait - spustí ve vlákně message dispatcheru synchronně: Ne hned, ale až po ukončení čekajících vláken Pak počká na ukončení run() Signatura: public static void invokeandwait(runnable dorun) throws InterruptedException, InvocationTargetException

Spouštění ve vlákně message dispatcheru final Runnable dohelloworld = new Runnable() { public void run() { System.out.println("Hello World on " + Thread.currentThread()); ; Thread appthread = new Thread() { public void run() { try { SwingUtilities.invokeAndWait(doHelloWorld); catch (Exception e) { e.printstacktrace(); System.out.println("Finished on "+Thread.currentThread()); ; appthread.start();

Dlouhé výpočty Ukládání a čtení souborů, ze sítě, dlouhé kalkulace... Spouštíme naproti tomu v separátním vlákně (vláknech), nejlépe pomocí SwingWorker worker = new MySwingWorker(); worker.addpropertychangelistener(progresslistener); worker.execute(); příklad viz Petr Adámek, kore/wiki

Model 1 Zjednodušená verze Model-View-Controller (MVC) Chybí kontroler, jen oddělený obsah (model, data) od prezentace worker = new MySwingWorker(); worker.addpropertychangelistener(progresslistener); worker.execute(); příklad viz Petr Adámek, kore/wiki

Internacionalizace Podpora v NetBeans V příslušném (hlavním) balíku aplikace Vytvořit ResourceBundle pomocí: New/Other/Java Properties Přidat všechna očekávaná národní prostředí: rightclick/add Locale Nad.properties souborem: rightclick/open (ne Edit!) Nad inspektorem objektů u vlastnosti text kliknout na... a zvolit from ResourceBundle a vybrat Podobně lze vybrat i horkou klávesu pro aktivaci, tooltip atd.

JTable a TableModel Implementuje Model 1, odděluje data od prezentace (komponenty) Tabulka je typu javax.swing.jtable; Model implementuje rozhraní TableModel nebo rozšiřuje javax.swing.table.abstracttablemodel Podobně funguje např. JList a JTree...

Příklad TableModelu class MyTableModel extends AbstractTableModel { private String[] columnnames = {"First Name", "Last Name", "Sport", "# of Years", "Vegetarian"; private Object[][] data = { {"Mary", "Campione","Snowboarding", new Integer(5), new Boolean(false), {"Alison", "Huml", "Rowing", new Integer(3), new Boolean(true) ; public int getcolumncount() { return columnnames.length;

Příklad TableModelu public int getrowcount() { return data.length; public String getcolumnname(int col) { return columnnames[col]; public Object getvalueat(int row, int col) { return data[row][col]; /*

Příklad TableModelu public Class getcolumnclass(int c) { return getvalueat(0, c).getclass(); public boolean iscelleditable(int row, int col) { //Note that the data/cell address is constant, //no matter where the cell appears onscreen. //...

Příklad TableModelu public void setvalueat( Object value, int row, int col) { //... data[row][col] = value; firetablecellupdated(row, col);