GUI. Systémová integrace pro desktopové aplikace

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

GUI. Systémová integrace pro desktopové aplikace

JAVA Unit testing Java, zimní semestr

JAVA JavaBeans Java, letní semestr 2018

Programovací jazyk Java. Grafická prostředí v Javě. Přednáška 4 AWT. Základy práce s GUI

JAVA Unit testing Java, zimní semestr

Programátorská příručka

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

RMI Remote Method Invocation

Algoritmizace a programování

Iterator & for cyklus

1. díl - Úvod do JavaFX

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

JAVA V RMI Java, letní semestr

Podmínky na zápočet. Java, zimní semestr

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.

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

Technologie Java. Jaroslav Žáček

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

Swing Vlákna Java, zimní semestr

8. GRAFICKÉ UŽIVATELSKÉ ROZHRANÍ

Začínáme s vývojem pro Android

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

UJO Framework. revoluční architektura beans. verze

JAVA JavaBeans Java, letní semestr

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Google Web Toolkit. Martin Šurkovský, SUR března Katedra informatiky

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

Úvod do JavaFX RICHARD LIPKA

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

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

Java a Caché IV: Manipulace s objekty

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

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

NetBeans platforma. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

KIV/PIA 2013 Jan Tichava

Programování v Javě I. Leden 2008

Java Výjimky Java, zimní semestr

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

JAVA. Java Management Extensions JMX

JAVA RMI Java, letní semestr 2018

Java aplety. Předávání parametrů z HTML

FXML, CSS RICHARD LIPKA

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

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

Úvod do programovacích jazyků (Java)

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

NOVINKY V JEE EJB 3.1. Zdeněk Troníček Fakulta informačních technologií ČVUT v Praze

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

Semináˇr Java X J2EE Semináˇr Java X p.1/23

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

Java Enum Java, zimní semestr ,2017 1

JAVA Moduly Java, letní semestr 2018

Úvodní informace. Petr Hnětynka 2/2 Zk/Z

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

Technologie Java Enterprise Edition. Přemek Brada, KIV ZČU

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

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

1. Distribuce Javy. 2. Vlastnosti J2EE aplikace. 3. Fyzická architektura J2EE aplikace. Distribuce Javy se liší podle jejího zamýšleného použití:

1 Platforma JavaFX. 1.1 Historie platformy JavaFX

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

Java Cvičení 01. CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics

(JME) Vybrané partie z jazyka Java (NPRG021) Jiří Tomeš

Úvodní informace. Petr Hnětynka 2/2 Zk/Z

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

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

Jini (pronounced GEE-nee) Cvičení 8 - DS 2006

3. Základy programovacího jazyka Java

Distribuované systémy a výpočty

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

Generické programování

20. Projekt Domácí mediotéka

GWT pro pokročilé. MoroSystems, s.r.o. Pavel Klobása. Senior Java Developer.

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

Java pro programátory.net

Datové struktury. alg12 1

Technology Entry form Entry up-to-date? Internal links Faulty internal Possible internal links

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Jazyk C# (seminář 6)

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

Změna vlastností kódem

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

Tvorba informačních systémů

Jalapeño: pekelně ostrá Java persistence v Caché. Daniel Kutáč Senior Sales Engineer

(Enterprise) JavaBeans. Lekce 7

KTE / ZPE Informační technologie

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

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Doxygen. Jakub Břečka

JAVA. Krátce o Reflection API

JAVA. Další jazyky kompilovatelné do Java byte-code

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

Technologie JavaBeans

KMI / TMA Tvorba mobilních aplikací. 2. seminář ZS 2016/2017 Středa 13:15-15:45

KMI / TMA Tvorba mobilních aplikací

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

Integrace OpenOffice.org a Javy. CZJUG, , Robert Vojta

Dědičnost (inheritance)

Transkript:

GUI Systémová integrace pro desktopové aplikace Java, zimní semestr 2016 11.1.2017 1

java.awt.desktop systémová integrace desktopových aplikací static boolean isdesktopsupported() test zda je integrace k dispozici static Desktop getdesktop() vrátí instanci void browse(uri uri) otevře uri v defaultním prohlížeči void edit(file file) otevře soubor v defaultním editoru pro daný typ souboru void mail(uri mailtouri) otevře defaultní mailový klient void open(file file) otevře soubor v defaultní aplikaci pro daný typ void print(file file) Java, zimní semestr 2016 11.1.2017 tisk souboru 2

java.awt.desktop boolean issupported(desktop.action action) test, co je podporováno Desktop.Action enum hodnoty BROWSE EDIT MAIL OPEN PRINT Java, zimní semestr 2016 11.1.2017 3

java.awt.systemtray reprezentuje systémový tray př. TrayIcon trayicon = null; if (SystemTray.isSupported()) { SystemTray tray = SystemTray.getSystemTray(); Image image =... ActionListener listener = new ActionListener() { public void actionperformed(actionevent e) {... } }; PopupMenu popup = new PopupMenu(); popup.add(...); trayicon = new TrayIcon(image, "Tray Demo", popup); trayicon.addactionlistener(listener); tray.add(trayicon); } Java, zimní semestr 2016 11.1.2017 4

java.awt.systemtray pravý stisk tlačítka na ikonu zobrazí menu levý stisk generuje action event jedna aplikace může přidat libovolné množství ikon metody static boolean issupported() void add(trayicon icon) void remove(trayicon icon) odebere ikonu z traye při ukončení aplikace jsou ikony odebrány automaticky TrayIcon[] gettrayicons() vrací všechny tray ikony aplikace Java, zimní semestr 2016 11.1.2017 5

JAVA Applet Java, zimní semestr 2016 11.1.2017 6

Přehled applet = "malý" program běžící v prohlížeči bezpečnostní omezení v podstatě žádný přístup k počítači omezený přístup na disk omezený přístup na síť... "podepisování" appletů!!! implementace rozšíření třídy javax.swing.japplet metody init() voláno jednou při inicializaci POZOR nutné použít SwingUtilities.invokeAndWait(Runnable r) start() voláno při každé zviditelnění appletu stop() voláno při každém zneviditelnění appletu Java, zimní semestr 2016 11.1.2017 DEPRECATED DEPRECATED destroy() voláno při ukončování appletu 7

JAVA JNLP Java Web Start Java, zimní semestr 2016 11.1.2017 8

Přehled Java Network Launch Protocol (JNLP) kombinace výhod appletu a normální aplikace aplikace se stáhne po sítí normální aplikace není to applet uloží se na disk a spustí v sandboxu při dalším spuštění se zkontroluje verze pokud je stejná, spustí se program z disku pokud se změnila, program se stáhne znovu podobná bezpečnostní omezení, jako applety aplikace lze podepisovat i nepodepsaná aplikace může mít přístup k počítači přes JNLP API rozdíl od appletů JNLP je jen specifikace implementace Java Web Start Java, zimní semestr 2016 11.1.2017 9

Vytvoření JNLP aplikace normální aplikace zabalená v JAR souboru vytvoří se k ní spouštěcí soubor xml, přípona jnlp Web server mime.conf application/x-java-jnlp-file JNLP <?xml version="1.0" encoding="utf-8"?> <jnlp codebase="http://somewhere/" href="hello.jnlp"> <information> <title>example</title> <vendor>vendor</vendor> <description>description</description> <icon href="icon.png"/> <offline-allowed/> </information> <resources> <j2se version="1.4+"/> <jar href="hello.jar"/> </resources> <application-desc main-class="mainclass" /> </jnlp> Java, zimní semestr 2016 11.1.2017 10

Java JavaFX

Přehled Java GUI Java 1.0 (1996) AWT použití nativních GUI komponent Java 1.2 (2000) Swing kompletní GUI v Javě JavaFX (2007) nová technologie běžící nad Java VM ale vlastní jazyk deklarativní zamýšleno jako konkurence pro Flash neujalo se JavaFX 2.0 (2011) zůstalo pouze API (jazyk zahozen) od JDK 7 update 6 součást std JDK (JavaFX 2.2) JDK 8 JavaFX 8 žádný další vývoj Swingu

Hello World public class HelloWorld extends Application { } @Override public void start(stage stage) { Label message = new Label("Hello, JavaFX!"); message.setfont(new Font(100)); stage.setscene(new Scene(message)); stage.settitle("hello"); stage.show(); } žádný J prefix // žádný main()

Hello World ve starších verzích bylo potřeba main() přidat explicitně public class MyApp extends Application { public static void main(string[] args) { launch(args); }... }

Události podobně jako ve Swingu/AWT ALE typicky se poslouchá na změny vlastností tj. neposlouchá se přímo na komponentě existují výjimky, např. tlačítko Slider slider = new Slider(10, 100, 100); Label message = new Label("Hello, JavaFX!"); slider.valueproperty().addlistener(property -> message.setfont(new Font(slider.getValue())));

Vlastnosti komponent (properties) interface Property<T> void addlistener(invalidationlistener listener) void addlistener(changelistener<? super T> listener) void bind(observablevalue<? extends T> observable) void bindbidirectional(property<t> other) implementace class ObjectProperty<T> class IntegerProperty class BooleanProperty class StringProperty...

Vlastnosti příklad implementace private StringProperty text = new SimpleStringProperty(""); public final StringProperty textproperty() { return text; } public final void settext(string newvalue){ text.set(newvalue); } public final String gettext() { return text.get(); }

Vlastnosti listenery InvalidationListener volá se pokud současná hodnota vlastnosti přestala platit umožňuje líné vyhodnocení void invalidated(observable observable) ChangeListener volá se při změně hodnoty vlastnosti je potřeba spočítat i novou hodnotu tj. neumožňuje líné vyhodnocení void changed(observablevalue<? extends T> observable, T oldvalue, T newvalue)

Vlastnosti propojování binding automatické aktualizování vlastnosti při změně jiné vlastnosti interně implementováno pomocí listenerů text1.textproperty().bind(text2.textproperty()); text1.textproperty().bindbidirectional( text2.textproperty()); třída Bindings statické metody pro snadné vytváření propojení

Layout vytvoření rozložení (layout) komponent JavaFX Scene Builder naklikání GUI ručně vytváření instancí komponent definice v FXML podobné jako ve Swingu panely (panes) místo layout managerů

Layout BorderPane (jako BorderLayout) HBox VBox GridPane (jako GridBagLayout) TilePane (jako GridLayout) VBox pane = new VBox(); pane.getchildren().addall(button1, button2,); pane.setpadding(new Insets(10));

FXML <?import java.net.*?> <?import javafx.geometry.*?> <?import javafx.scene.control.*?> <?import javafx.scene.layout.*?> <?import javafx.scene.text.*?> <GridPane fx:controller="fxmlexample.fxmlexamplecontroller" xmlns:fx="http://javafx.com/fxml" alignment="center" hgap="10" vgap="10"> <padding><insets top="25" right="25" bottom="10" left="25"/></padding> <Text text="welcome" GridPane.columnIndex="0" GridPane.rowIndex="0" GridPane.columnSpan="2"/> <Label text="user Name:" GridPane.columnIndex="0" GridPane.rowIndex="1"/>...

FXML použití public void start(stage stage) { try { Parent root = FXMLLoader.load(getClass(). getresource("file.fxml")); stage.setscene(new Scene(root)); stage.show(); } catch (IOException ex) { ex.printstacktrace(); System.exit(0); } }

FXML přidání listenerů/propojení a) <TextField id="username" TextField username = (TextField) root.lookup("#username"); b) <GridPane xmlns:fx="http://javafx.com/fxml" hgap="10" vgap="10" fx:controller="logindialogcontroller"> <Button fx:id="okbutton" text="ok" /> public class LoginDialogController implements Initializable { @FXML private TextField username; @FXML private Button okbutton; public void initialize(url url, ResourceBundle rb){ okbutton.disableproperty().bind(...

CSS vzhled UI lze nastavit pomocí CSS Scene scene = new Scene(pane); scene.getstylesheets().add("scene.css"); používají se JavaFX specifické atributy #pane { -fx-padding: 0.5em; -fx-hgap: 0.5em; -fx-vgap: 0.5em; -fx-background-image: url("bg.jpg") }

Animace apod. ScaleTransition ScaleTransition st = new ScaleTransition(Duration.millis(3000)); st.setbyx(1.5); st.setbyy(1.5); st.setnode(button); st.setcyclecount(animation.indefinite); st.setautoreverse(true); st.play(); FadeTransition RotateTransition DropShadow...

Různé komponenty JavaFX obsahuje WebKit (HTML renderovací jádro) přehrávač medií...

Java Pokračování...

Kam dál... NPRG021 Pokročilé programování na platformě Java LS 2/1 obsah Reflection API Generické typy, anotace ClassLoaders, Security RMI JavaBeans Java Enterprise Edition: EJB, Servlets, Java Server Pages, Spring,... Java Micro Edition: Java pro mobilní a Embedded systémy, CLDC, MIDP, MEEP RTSJ, Java APIs for XML, JDBC, JMX,... Android částečně povinné pro NPRG059 Praktikum z pokročilého objektového programování povinný předmět pro některé Mgr. okruhy NPRG044 Platformy NetBeans and Eclipse

Java, zimní semestr Verze prezentace 2016 J13.cz.2016.01 11.1.2017 Tato prezentace podléhá licenci Creative Commons Uveďte autora-neužívejte komerčně 4.0 Mezinárodní License. 30