SlideShare ist ein Scribd-Unternehmen logo
1 von 20
Oracles Technologie für Rich Client Anwendungen

Präsentation für den 9. JUGR Stammtisch
        Autor: Reto Zahner Datum: 5. Mai 2011
Themenübersicht
Überblick - Was ist JavaFX?
Überblick - Was ist JavaFX?


„Rich Client Application“ Plattform
           Adobe Flex und Microsoft Silverlight
Überblick - Was ist JavaFX?


„Rich Client Application“ Plattform
           Adobe Flex und Microsoft Silverlight

Konzipiert für verschiedene Medien
           Internet, Mobile, Desktop, TV
Überblick - Was ist JavaFX?


„Rich Client Application“ Plattform
            Adobe Flex und Microsoft Silverlight

Konzipiert für verschiedene Medien
            Internet, Mobile, Desktop, TV

Spezialisiert auf interaktive, multimediale Inhalte
            Streaming, CSS-Styling, Effekte, Animationen
Überblick - Was ist JavaFX?


„Rich Client Application“ Plattform
            Adobe Flex und Microsoft Silverlight

Konzipiert für verschiedene Medien
            Internet, Mobile, Desktop, TV

Spezialisiert auf interaktive, multimediale Inhalte
            Streaming, CSS-Styling, Effekte, Animationen

Einfache Erstellung von Benutzeroberflächen
            Skripting für GUI - Javaobjekte verwenbar
Überblick - Features
Überblick - Features


Erweiterung der bewährten Java-Technolgie
           > Verteilung über Applets und Java Webstart
           > Zugriff auf bestehende Java-Klassen
Überblick - Features


Erweiterung der bewährten Java-Technolgie
           > Verteilung über Applets und Java Webstart
           > Zugriff auf bestehende Java-Klassen

Nutzung von Webtechnologien
           > Einbindung von Medien via URLs
           > Design über CSS steuerbar
Überblick - Features


Erweiterung der bewährten Java-Technolgie
           > Verteilung über Applets und Java Webstart
           > Zugriff auf bestehende Java-Klassen

Nutzung von Webtechnologien
           > Einbindung von Medien via URLs
           > Design über CSS steuerbar

FXScript für Benutzeroberfläche
           > Scriptingsprache für GUI-Entwickler
           > Deklaration der Elemente und Objekte
           > Data-Binding und Variablen-Trigger
Überblick - Komponenten


 Services        Inhalte          Applikationen

     Application Framework             Tools
Desktop     Mobile           TV       Designer

  API, Crossplattform Runtime          Tools
      JavaFX Runtime (JRE)           Entwickler

                     JVM
Komponenten - GUI -Elemente


    • Layoutmanager
    • Effekte
    • Animationen
    import javafx.scene.control.Button;
    import javafx.scene.layout.HBox;
    import javafx.scene.layout.LayoutInfo;

    ...

    HBox{
      content:
        Button {
          layoutInfo: LayoutInfo { width: 150 }
          text: "OK"
          translateY: 10
          strong: true
          font: Font{size: 10 name: "Tahoma"}
          rotate: bind angle
        }
      }
    }

    ...
Komponenten - CSS-Styling


                                         • CSS auf sämtliche Elemente anwendbar
                                         • Stylesheets dynamisch austauschbar
import javafx.scene.control.Button;
import javafx.scene.layout.HBox;
import javafx.scene.layout.LayoutInfo;

...

Stage{
    scene: Scene{
        stylesheets: [ "{__DIR__}stylesheet custom.css" ]
    }
}


...
FXScript - Allgemeiner Aufbau

import javafx.stage.Stage;
...
import javafx.scene.image.ImageView;


Stage {
      title: "Nodes"
      scene: Scene {
          width: 220
          height: 170
          fill: Color.LIGHTBLUE
          content: [
              Circle {
                    centerX: 50   centerY: 50   radius: 50
                    stroke: Color.YELLOW
                    fill: Color.WHITE
              },
              Text {
                    transforms: Transform.rotate(33, 10, 100)
	                    content: "Duke"
              },
	                 ImageView {
                    image: Image {url: "{__DIR__}dukewave.png"}
              }
          ]//Content
      }//Scene
}//Stage
FXScript - Data-Binding - Trigger

var myStreet = "1 Main Street";                  import javafx.stage.Stage;
var myCity = "Santa Clara";                      ...
var myState = "CA";                              import javafx.scene.input.MouseEvent;
var myZip = "95050";
                                                 var count = 0;
class Address {                                  def images = for(i in [0..9]){Image {url: "{__DIR__}{i}.png"};}
     var street: String;                         var currImg = images[count] on replace oldValue {
     var city: String;                                 if(count < 10){
     var state: String;                                    if (count == 9){println("Max count ({count}) reached.");}
     var zip: String;                                  } else {
}                                                          count = 9;
                                                           currImg = oldValue;
def address = Address {                                    println("Done. The counter should look OK now.");
     street: bind myStreet;                            }
     city: myCity;                               };
     state: myState;
     zip: myZip;                                 Stage {
};                                                     scene: Scene {
                                                           content: ImageView {
println("address.street == {address.street}");                 image: bind currImg
myStreet = "100 Maple Street";                                 onMouseClicked:
println("address.street == {address.street}");                     function(e: MouseEvent) {
                                                                         println("Click number {++count} ...");
                                                                         currImg = images[count];
                                                               }
                                                           }
                                                       }
                                                 }
FXScript - Sequenzen

var days = ["Mon"];                     seq[a..b]
                                        def days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"];
insert "Fri" into days;                 def weekend = days[5..6];
insert "Sat" into days;
insert "Sun" into days;                 seq[a..<b]
                                        def days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"];
insert "Thu" before days[2];            def weekdays = days[0..<5];
insert "wed" after days[1];
                                        seq[a..]
delete "Sun" from days;                 def days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"];
                                        def weekend = days[5..];
delete days;
                                        seq[a..<]
days = reverse days;                    def days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"];
                                        def days2 = days[0..<];
var squares = for (i in [1..10]) i*i;
FXScript - Java-Klassen verwenden

/** Foo.java */                                           ...
public interface Foo {                                    import javax.swing.JTree;
  public abstract void doSomethingUseful();               import javafx.ext.swing.SwingComponent;
}                                                         import javafx.animation.transition.FadeTransition;


/** Fizzle.fx */                                          var tree = SwingComponent.wrap(new JTree());
public class Fizzle extends Foo {                         tree.translateY = 50;
  override public function doSomethingUseful():Void {     tree.height = 600;
    myBankAcount.balance += 1000000                       tree.width = 400;
  }
}                                                         Stage {
                                                              title: "Add JTree"
/** Verwendung des Interfaces Foo in Java */                  width: 200
void blah(Foo foo) {                                          height: 400
  if ( publicDebt < javafx.util.Math.pow(10, 12) )            scene: Scene {
    foo.doSomethingUseful();                                       content : tree
}                                                                 }
                                                                  x: 10,
/** Verwendung der Klasse Fizzle in JavaFX    */                  y: 10
var fizzle = Fizzle {}                                    }
fizzle.doSomethingUseful();                               var fadeTransition = FadeTransition {
                                                                  duration: 3s node: tree
                                                                  fromValue: 1.0 toValue: 0.1
                                                                  repeatCount:10 autoReverse: true
                                                          }
                                                          fadeTransition.play();
JavaFX 2.0 - Pläne


• Weiterführung der Plattform durch Oracle bestätigt
• Zentrale Technologie für „Rich Client Applications“
• Neue High-Performance Graphic-Engine
• Deployment wird weiter vereinfacht.
• Verwendung der neuen JVM-Sprachfeatures.
JavaFX 2.0 - Wichtigste Änderungen


• Weiterführung der Plattform durch Oracle bestätigt
• JavaFX-API wird für Java verfügbar gemacht.
• Verbesserung der Performance. (OpenGL, DirectX)
• Multimedia (Animationen, Media-Stream Events, ...)
• Weitere Controls (WebView, Dialoge, ...)
• WebEngine, WebSource für Ausgabe in HTML-DOM

Weitere ähnliche Inhalte

Ähnlich wie JavaFX - 9. JUGR Stammtisch - 5. Mai 2011

Javascript auf Client und Server mit node.js - webtech 2010
Javascript auf Client und Server mit node.js - webtech 2010Javascript auf Client und Server mit node.js - webtech 2010
Javascript auf Client und Server mit node.js - webtech 2010Dirk Ginader
 
Go - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare SystemeGo - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare SystemeFrank Müller
 
Warum ECMAScript 6 die Welt ein Stückchen besser macht
Warum ECMAScript 6 die Welt ein Stückchen besser machtWarum ECMAScript 6 die Welt ein Stückchen besser macht
Warum ECMAScript 6 die Welt ein Stückchen besser machtSebastian Springer
 
Backend-Services mit Rust
Backend-Services mit RustBackend-Services mit Rust
Backend-Services mit RustJens Siebert
 
Die Zukunft der Webstandards - Webinale 31.05.2010
Die Zukunft der Webstandards - Webinale 31.05.2010Die Zukunft der Webstandards - Webinale 31.05.2010
Die Zukunft der Webstandards - Webinale 31.05.2010Patrick Lauke
 
.NET Summit 2016 München: EcmaScript 2015+ with TypeScript
.NET Summit 2016 München: EcmaScript 2015+ with TypeScript.NET Summit 2016 München: EcmaScript 2015+ with TypeScript
.NET Summit 2016 München: EcmaScript 2015+ with TypeScriptManfred Steyer
 
JsUnconf 2014
JsUnconf 2014JsUnconf 2014
JsUnconf 2014emrox
 
Dojo Und Notes
Dojo Und NotesDojo Und Notes
Dojo Und Notesdominion
 
Angular von 0 auf 100
Angular von 0 auf 100Angular von 0 auf 100
Angular von 0 auf 100Yvette Teiken
 
Malte Wessel - Google web toolkit
Malte Wessel - Google web toolkitMalte Wessel - Google web toolkit
Malte Wessel - Google web toolkitdrbreak
 
App Entwicklung mit Appcelerator Titanium - MTC 2014
App Entwicklung mit Appcelerator Titanium - MTC 2014App Entwicklung mit Appcelerator Titanium - MTC 2014
App Entwicklung mit Appcelerator Titanium - MTC 2014Marcel Pociot
 
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...GFU Cyrus AG
 
dotnet Cologne 2013 - Windows Azure Mobile Services
dotnet Cologne 2013 - Windows Azure Mobile Servicesdotnet Cologne 2013 - Windows Azure Mobile Services
dotnet Cologne 2013 - Windows Azure Mobile ServicesSascha Dittmann
 
Mobile Webentwicklung mit HTML5
Mobile Webentwicklung mit HTML5Mobile Webentwicklung mit HTML5
Mobile Webentwicklung mit HTML5kkramhoeft
 
Migrationspfade für Angular 2
Migrationspfade für Angular 2Migrationspfade für Angular 2
Migrationspfade für Angular 2Manfred Steyer
 
Gwt Techtalk Präsentation
Gwt Techtalk PräsentationGwt Techtalk Präsentation
Gwt Techtalk Präsentationmlegenhausen
 

Ähnlich wie JavaFX - 9. JUGR Stammtisch - 5. Mai 2011 (20)

Javascript auf Client und Server mit node.js - webtech 2010
Javascript auf Client und Server mit node.js - webtech 2010Javascript auf Client und Server mit node.js - webtech 2010
Javascript auf Client und Server mit node.js - webtech 2010
 
Go - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare SystemeGo - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare Systeme
 
Warum ECMAScript 6 die Welt ein Stückchen besser macht
Warum ECMAScript 6 die Welt ein Stückchen besser machtWarum ECMAScript 6 die Welt ein Stückchen besser macht
Warum ECMAScript 6 die Welt ein Stückchen besser macht
 
Backend-Services mit Rust
Backend-Services mit RustBackend-Services mit Rust
Backend-Services mit Rust
 
Webapplikationen mit Node.js
Webapplikationen mit Node.jsWebapplikationen mit Node.js
Webapplikationen mit Node.js
 
Die Zukunft der Webstandards - Webinale 31.05.2010
Die Zukunft der Webstandards - Webinale 31.05.2010Die Zukunft der Webstandards - Webinale 31.05.2010
Die Zukunft der Webstandards - Webinale 31.05.2010
 
.NET Summit 2016 München: EcmaScript 2015+ with TypeScript
.NET Summit 2016 München: EcmaScript 2015+ with TypeScript.NET Summit 2016 München: EcmaScript 2015+ with TypeScript
.NET Summit 2016 München: EcmaScript 2015+ with TypeScript
 
JsUnconf 2014
JsUnconf 2014JsUnconf 2014
JsUnconf 2014
 
Dojo Und Notes
Dojo Und NotesDojo Und Notes
Dojo Und Notes
 
Angular von 0 auf 100
Angular von 0 auf 100Angular von 0 auf 100
Angular von 0 auf 100
 
Malte Wessel - Google web toolkit
Malte Wessel - Google web toolkitMalte Wessel - Google web toolkit
Malte Wessel - Google web toolkit
 
App Entwicklung mit Appcelerator Titanium - MTC 2014
App Entwicklung mit Appcelerator Titanium - MTC 2014App Entwicklung mit Appcelerator Titanium - MTC 2014
App Entwicklung mit Appcelerator Titanium - MTC 2014
 
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
 
dotnet Cologne 2013 - Windows Azure Mobile Services
dotnet Cologne 2013 - Windows Azure Mobile Servicesdotnet Cologne 2013 - Windows Azure Mobile Services
dotnet Cologne 2013 - Windows Azure Mobile Services
 
TypeScript
TypeScriptTypeScript
TypeScript
 
Hdc2012 cordova-präsi
Hdc2012 cordova-präsiHdc2012 cordova-präsi
Hdc2012 cordova-präsi
 
JavaScript & jQuery
JavaScript & jQueryJavaScript & jQuery
JavaScript & jQuery
 
Mobile Webentwicklung mit HTML5
Mobile Webentwicklung mit HTML5Mobile Webentwicklung mit HTML5
Mobile Webentwicklung mit HTML5
 
Migrationspfade für Angular 2
Migrationspfade für Angular 2Migrationspfade für Angular 2
Migrationspfade für Angular 2
 
Gwt Techtalk Präsentation
Gwt Techtalk PräsentationGwt Techtalk Präsentation
Gwt Techtalk Präsentation
 

JavaFX - 9. JUGR Stammtisch - 5. Mai 2011

  • 1. Oracles Technologie für Rich Client Anwendungen Präsentation für den 9. JUGR Stammtisch Autor: Reto Zahner Datum: 5. Mai 2011
  • 3. Überblick - Was ist JavaFX?
  • 4. Überblick - Was ist JavaFX? „Rich Client Application“ Plattform Adobe Flex und Microsoft Silverlight
  • 5. Überblick - Was ist JavaFX? „Rich Client Application“ Plattform Adobe Flex und Microsoft Silverlight Konzipiert für verschiedene Medien Internet, Mobile, Desktop, TV
  • 6. Überblick - Was ist JavaFX? „Rich Client Application“ Plattform Adobe Flex und Microsoft Silverlight Konzipiert für verschiedene Medien Internet, Mobile, Desktop, TV Spezialisiert auf interaktive, multimediale Inhalte Streaming, CSS-Styling, Effekte, Animationen
  • 7. Überblick - Was ist JavaFX? „Rich Client Application“ Plattform Adobe Flex und Microsoft Silverlight Konzipiert für verschiedene Medien Internet, Mobile, Desktop, TV Spezialisiert auf interaktive, multimediale Inhalte Streaming, CSS-Styling, Effekte, Animationen Einfache Erstellung von Benutzeroberflächen Skripting für GUI - Javaobjekte verwenbar
  • 9. Überblick - Features Erweiterung der bewährten Java-Technolgie > Verteilung über Applets und Java Webstart > Zugriff auf bestehende Java-Klassen
  • 10. Überblick - Features Erweiterung der bewährten Java-Technolgie > Verteilung über Applets und Java Webstart > Zugriff auf bestehende Java-Klassen Nutzung von Webtechnologien > Einbindung von Medien via URLs > Design über CSS steuerbar
  • 11. Überblick - Features Erweiterung der bewährten Java-Technolgie > Verteilung über Applets und Java Webstart > Zugriff auf bestehende Java-Klassen Nutzung von Webtechnologien > Einbindung von Medien via URLs > Design über CSS steuerbar FXScript für Benutzeroberfläche > Scriptingsprache für GUI-Entwickler > Deklaration der Elemente und Objekte > Data-Binding und Variablen-Trigger
  • 12. Überblick - Komponenten Services Inhalte Applikationen Application Framework Tools Desktop Mobile TV Designer API, Crossplattform Runtime Tools JavaFX Runtime (JRE) Entwickler JVM
  • 13. Komponenten - GUI -Elemente • Layoutmanager • Effekte • Animationen import javafx.scene.control.Button; import javafx.scene.layout.HBox; import javafx.scene.layout.LayoutInfo; ... HBox{ content: Button { layoutInfo: LayoutInfo { width: 150 } text: "OK" translateY: 10 strong: true font: Font{size: 10 name: "Tahoma"} rotate: bind angle } } } ...
  • 14. Komponenten - CSS-Styling • CSS auf sämtliche Elemente anwendbar • Stylesheets dynamisch austauschbar import javafx.scene.control.Button; import javafx.scene.layout.HBox; import javafx.scene.layout.LayoutInfo; ... Stage{ scene: Scene{ stylesheets: [ "{__DIR__}stylesheet custom.css" ] } } ...
  • 15. FXScript - Allgemeiner Aufbau import javafx.stage.Stage; ... import javafx.scene.image.ImageView; Stage { title: "Nodes" scene: Scene { width: 220 height: 170 fill: Color.LIGHTBLUE content: [ Circle { centerX: 50 centerY: 50 radius: 50 stroke: Color.YELLOW fill: Color.WHITE }, Text { transforms: Transform.rotate(33, 10, 100) content: "Duke" }, ImageView { image: Image {url: "{__DIR__}dukewave.png"} } ]//Content }//Scene }//Stage
  • 16. FXScript - Data-Binding - Trigger var myStreet = "1 Main Street"; import javafx.stage.Stage; var myCity = "Santa Clara"; ... var myState = "CA"; import javafx.scene.input.MouseEvent; var myZip = "95050"; var count = 0; class Address { def images = for(i in [0..9]){Image {url: "{__DIR__}{i}.png"};} var street: String; var currImg = images[count] on replace oldValue { var city: String; if(count < 10){ var state: String; if (count == 9){println("Max count ({count}) reached.");} var zip: String; } else { } count = 9; currImg = oldValue; def address = Address { println("Done. The counter should look OK now."); street: bind myStreet; } city: myCity; }; state: myState; zip: myZip; Stage { }; scene: Scene { content: ImageView { println("address.street == {address.street}"); image: bind currImg myStreet = "100 Maple Street"; onMouseClicked: println("address.street == {address.street}"); function(e: MouseEvent) { println("Click number {++count} ..."); currImg = images[count]; } } } }
  • 17. FXScript - Sequenzen var days = ["Mon"]; seq[a..b] def days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"]; insert "Fri" into days; def weekend = days[5..6]; insert "Sat" into days; insert "Sun" into days; seq[a..<b] def days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"]; insert "Thu" before days[2]; def weekdays = days[0..<5]; insert "wed" after days[1]; seq[a..] delete "Sun" from days; def days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"]; def weekend = days[5..]; delete days; seq[a..<] days = reverse days; def days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"]; def days2 = days[0..<]; var squares = for (i in [1..10]) i*i;
  • 18. FXScript - Java-Klassen verwenden /** Foo.java */ ... public interface Foo { import javax.swing.JTree; public abstract void doSomethingUseful(); import javafx.ext.swing.SwingComponent; } import javafx.animation.transition.FadeTransition; /** Fizzle.fx */ var tree = SwingComponent.wrap(new JTree()); public class Fizzle extends Foo { tree.translateY = 50; override public function doSomethingUseful():Void { tree.height = 600; myBankAcount.balance += 1000000 tree.width = 400; } } Stage { title: "Add JTree" /** Verwendung des Interfaces Foo in Java */ width: 200 void blah(Foo foo) { height: 400 if ( publicDebt < javafx.util.Math.pow(10, 12) ) scene: Scene { foo.doSomethingUseful(); content : tree } } x: 10, /** Verwendung der Klasse Fizzle in JavaFX */ y: 10 var fizzle = Fizzle {} } fizzle.doSomethingUseful(); var fadeTransition = FadeTransition { duration: 3s node: tree fromValue: 1.0 toValue: 0.1 repeatCount:10 autoReverse: true } fadeTransition.play();
  • 19. JavaFX 2.0 - Pläne • Weiterführung der Plattform durch Oracle bestätigt • Zentrale Technologie für „Rich Client Applications“ • Neue High-Performance Graphic-Engine • Deployment wird weiter vereinfacht. • Verwendung der neuen JVM-Sprachfeatures.
  • 20. JavaFX 2.0 - Wichtigste Änderungen • Weiterführung der Plattform durch Oracle bestätigt • JavaFX-API wird für Java verfügbar gemacht. • Verbesserung der Performance. (OpenGL, DirectX) • Multimedia (Animationen, Media-Stream Events, ...) • Weitere Controls (WebView, Dialoge, ...) • WebEngine, WebSource für Ausgabe in HTML-DOM

Hinweis der Redaktion

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. Das ist ein Test\nDiese Information wir auf dem iphone angezeigt und soll dort gelesen werden k&amp;#xF6;nnen.\n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n