<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Information Centre &#187; ria</title>
	<atom:link href="http://my.center-of.info/tag/ria/feed/" rel="self" type="application/rss+xml" />
	<link>http://my.center-of.info</link>
	<description>“Wenn etwas schon da war, wie kann man es dann patentieren?” D.E.Knuth, 2002</description>
	<lastBuildDate>Sat, 22 Oct 2011 11:09:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>JavaFX 1.0 Example</title>
		<link>http://my.center-of.info/2008/12/07/javafx-10-example/</link>
		<comments>http://my.center-of.info/2008/12/07/javafx-10-example/#comments</comments>
		<pubDate>Sun, 07 Dec 2008 13:10:59 +0000</pubDate>
		<dc:creator>Haf</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[javafx]]></category>
		<category><![CDATA[JEE]]></category>
		<category><![CDATA[ria]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://my.center-of.info/?p=89</guid>
		<description><![CDATA[Im letzten Beitrag habe ich kurz JavaFX vorgestellt. Zu den theoretischen Daten folgt nun ein kleines praktisches Beispiel. Das Beispiel basiert auf das Tutorial von SUN [1] und wurde um die Eigenschaft erweitert, dass das Applet auch auf dem Desktop verwendet werden kann. Das Beispiel erstellt eine analoge Uhr, welche man sich auf den Desktop [...]]]></description>
			<content:encoded><![CDATA[<p>Im <a title="Information Centre: JavaFX 1.0" href="http://my.center-of.info/2008/12/07/javafx-10/">letzten Beitrag</a> habe ich kurz <a title="SUN JavaFX" href="http://www.javafx.com" target="_blank">JavaFX</a> vorgestellt. Zu den theoretischen Daten folgt nun ein kleines praktisches Beispiel.</p>
<p>Das Beispiel basiert auf das Tutorial von SUN [1] und wurde um die Eigenschaft erweitert, dass das Applet auch auf dem Desktop verwendet werden kann.</p>
<p><span id="more-89"></span></p>
<p>Das Beispiel erstellt eine analoge Uhr, welche man sich auf den Desktop ziehen kann. Der Fokus liegt auf die Implementierung und nicht auf jegliche graphische Feinheiten.</p>
<p>Ein JavaFX Script wie im unteren Listing zu sehen beinhaltet immer eine <a title="JavaFX API: Stage" href="http://java.sun.com/javafx/1/docs/api/javafx.stage/javafx.stage.Stage.html" target="_blank">Stage</a> Klasse. Dies ist der globale Container, der alle weiteren Elemente beinhaltet.</p>
<pre class="brush: java">
import javafx.scene.Scene;
import javafx.stage.Stage;

var stage = Stage {
      title: &amp;amp;amp;amp;amp;quot;JavaFX Test Clock&amp;amp;amp;amp;amp;quot;
      width: 300
      height: 300
      scene: Scene {
          content: []
     }
}
</pre>
<p>Da JavaFX eine deklarative Sprache ist, beschreibt man, was man haben will. Dafür gibt es verschiedene Propterties (wie in dem Fall: width, height, scene, content), die man belegen kann.</p>
<p>Ein Stage Container besitzt ein <a title="SUN JavaFX API: Scene" href="http://java.sun.com/javafx/1/docs/api/javafx.scene/javafx.scene.Scene.html" target="_blank">Scene</a>, in dem verschiedene Nodes enthalten sind. <a title="SUN JavaFX API: Node" href="http://java.sun.com/javafx/1/docs/api/javafx.scene/javafx.scene.Node.html" target="_blank">Node</a> kann hier als ein graphisches Element (<a title="SUN JavaFX API: Rectangle" href="http://java.sun.com/javafx/1/docs/api/javafx.scene.shape/javafx.scene.shape.Rectangle.html" target="_blank">Rectangle</a>, <a title="SUN JavaFX API: Text" href="http://java.sun.com/javafx/1/docs/api/javafx.scene.text/javafx.scene.text.Text.html" target="_blank">Text</a>, <a title="SUN JavaFX API: ImageView" href="http://java.sun.com/javafx/1/docs/api/javafx.scene.image/javafx.scene.image.ImageView.html" target="_blank">ImageView</a>) angesehen werden. In dem oberen Listing gibt es noch keine Nodes &#8211; content ist ein leeres Array.</p>
<p>Eine Uhr besteht aus verschiedenen Kreisen und Linien für die Zeiger. Nun könnte man in dem stage.scene.content diese graphischen Elemente schreiben, da man jedoch etwas strukturierter arbeiten will, kapseln wir die Funktionalität in eine eigene Klasse. Im folgenden Listing ist ein Teil von Clock.fx zu sehen:</p>
<pre class="brush: java">
public class Clock extends CustomNode {

public var radius: Number = 77;
public var centerX: Number = 144;
public var centerY: Number = 144;

public var hours: Number;
public var minutes: Number;
public var seconds: Number;

public override function create(): Node {
  return Group {
    content: [
     Group {
      transforms: Translate {
        x: centerX
        y: centerY
      }
      content: [
        // displays the number of every third hour
        for (i in [3, 6, 9, 12])
          Text {
             transforms: Translate {
                x: -5,
                y: 5
             }
             fill: Color.GREEN
             font: Font {
               size: 16
             }
             x: radius * (( i + 0 ) mod 2 * ( 2 - i / 3))
             y: radius * (( i + 1 ) mod 2 * ( 3 - i / 3))
             content: &amp;amp;amp;amp;amp;quot;{i}&amp;amp;amp;amp;amp;quot;
          },  //Text

          // display a yellow point for the rest of the
          // hours on the clock
          for (i in [1..12] )
            if (i mod 3 != 0 ) then Circle {
               transforms: Rotate {
                  angle: 30 * i
               }
               centerX: radius
               radius: 3
               fill: Color.YELLOW
            } // if
            else [ ],

            // clock&#039;s first center circle
            Circle {
              radius: 5
              fill: Color.DARKRED
            }, //Circle
            // the smaller center circle
            Circle {
              radius: 3
              fill: Color.RED
            }, //Circle
            // the seconds hand
            Line {
              transforms: Rotate {
                angle: bind seconds * 6
              }
              endY: -radius - 3
              strokeWidth: 2
              stroke: Color.VIOLET
            },  //Line
            // the hour hand
            Path {
              transforms: Rotate {
                 angle: bind (hours + minutes / 60) * 30 - 90
              }
              fill: Color.YELLOW
              elements: [
                 MoveTo {
                    x: 4,
                    y: 4
                 },
                 ArcTo {
                    x: 4
                    y: -4
                    radiusX: 1
                    radiusY: 1
                 },
                 LineTo {
                    x: radius - 15
                    y: 0
                 },
              ] //elements
            },  // Path
            // the minutes hand
            Path {
              transforms: Rotate {
                 angle: bind minutes * 6 - 90
              }
              fill: Color.GREEN
              elements: [
                 MoveTo {
                    x: 4,
                    y: 4
                 },
                 ArcTo {
                    x: 4
                    y: -4
                    radiusX: 1
                    radiusY: 1
                 },
                 LineTo {
                    x: radius
                    y: 0
                 },
              ] // elements
            } // Path
       ] // 2. Group content
     } // Group
   ] // Group content
  };  // Group
 } // create()

} // class
</pre>
<p>Um nun das Drag-and-Drop des Applets zu ermöglichen, erweitert man den Stage um einen sogenannten <a href="http://java.sun.com/javafx/1/docs/api/javafx.stage/javafx.stage.AppletStageExtension.html" target="_blank" title="SUN JavaFX API: AppletStageExtension">AppletStageExtension</a>. </p>
<pre class="brush: java">
stage = Stage {
    title: &amp;amp;amp;amp;amp;quot;JavaFX Test Clock&amp;amp;amp;amp;amp;quot;
    width: 300
    height: 300
    style: StageStyle.TRANSPARENT
    onClose: function() {
        //System.exit(0);
    }
    visible: true
    scene: Scene {
        fill: bind if (inBrowser) Color.WHITE else Color.TRANSPARENT
        content: [
            Clock {},
            // drag controls
            dragArea,
            dragClosers,
            statusText
        ]
    }
    extensions: [
        AppletStageExtension {
            shouldDragStart: function(e): Boolean {
                return inBrowser and e.primaryButtonDown and dragArea.hover;
            }
            onDragStarted: function(): Void {
                inBrowser = false;
            }
            onAppletRestored: function(): Void {
                inBrowser = true;
            }
            useDefaultClose: false
        }
    ]
}
</pre>
<p>Die Funktion shoudDragStart() gibt an, ob die Drag-Drop-Funktionalität angeboten werden soll, oder nicht.<br />
Anzumerken ist, dass das Property AppletStageExtension.useDefaultClose = false ist, da ein eigenes Close-Symbol erstellt wurde. Beim Betätigen dieses Buttons schließt sich das Applet und kehrt zum Browser zurück &#8211; falls dieser noch vorhanden ist.</p>
<p>In dem oberen Listing beinhaltet stage.scene.content noch den Node &#8220;dragArea&#8221;:</p>
<pre class="brush: java">
var dragArea:Rectangle = Rectangle {
    x: 155
    y: 30
    width: 420
    height: 25
    fill: Color.RED
    onMouseDragged:function(e:MouseEvent):Void {
        stage.x += e.dragX;
        stage.y += e.dragY;
    }
};
</pre>
<p>Das ist der Bereich, in dem der Nutzer das Applet herum ziehen kann. In der onMouseDragged() Funktion wird immer die aktuelle Position der Stage gesetzt.</p>
<p>Was passiert, wenn ein Applet auf den Desktop verschoben wird und das Browser-Fenster geschlossen wird? Dann bietet Java die Möglichkeit eine Verknüpfung zu erstellen.<br />
Dabei speichert es ein paar XML-Daten im User-Verzeichnis und setzt eine Verlinkung, um die Daten per Java Webstart zu starten.</p>
<p>Der Inhalt der JNLP-XML-Datei sieht z.B. so aus:</p>
<pre class="brush: xml">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;jnlp spec=&quot;1.0+&quot; codebase=&quot;http://example.net/JavaFXClock&quot; href=&quot;JavaFXClock_browser.jnlp&quot;&gt;
    &lt;information&gt;
        &lt;title&gt;JavaFXClock&lt;/title&gt;
        &lt;vendor&gt;Hafid Haddouti&lt;/vendor&gt;
        &lt;homepage href=&quot;http://example.net/JavaFXClock&quot;/&gt;
        &lt;description&gt;JavaFXClock&lt;/description&gt;
        &lt;offline-allowed/&gt;
        &lt;shortcut&gt;
            &lt;desktop/&gt;
        &lt;/shortcut&gt;
    &lt;/information&gt;
    &lt;resources&gt;
        &lt;j2se version=&quot;1.5+&quot;/&gt;
        &lt;extension name=&quot;JavaFX Runtime&quot; href=&quot;http://dl.javafx.com/javafx-rt.jnlp&quot;/&gt;
        &lt;jar href=&quot;JavaFXClockt.jar&quot; main=&quot;true&quot;/&gt;
    &lt;/resources&gt;
    &lt;applet-desc name=&quot;JavaFXClock&quot; main-class=&quot;com.sun.javafx.runtime.adapter.Applet&quot; width=&quot;350&quot; height=&quot;350&quot;&gt;
        &lt;param name=&quot;MainJavaFXScript&quot; value=&quot;javafxtest.Main&quot;&gt;
    &lt;/applet-desc&gt;
&lt;/jnlp&gt;
</pre>
<p>Ein Beispiel ist <a href="http://my.center-of.info/javafx-clock-example/">hier</a> zu finde.</p>
<p>Links:<br />
[1] JavaFX Tutorial: <a title="Building a JavaFX Application Using NetBeans IDE" href="http://java.sun.com/javafx/1/tutorials/build-javafx-nb-app/" target="_blank">http://java.sun.com/javafx/1/tutorials/build-javafx-nb-app/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://my.center-of.info/2008/12/07/javafx-10-example/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaFX 1.0</title>
		<link>http://my.center-of.info/2008/12/07/javafx-10/</link>
		<comments>http://my.center-of.info/2008/12/07/javafx-10/#comments</comments>
		<pubDate>Sun, 07 Dec 2008 11:11:59 +0000</pubDate>
		<dc:creator>Haf</dc:creator>
				<category><![CDATA[JEE]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[javafx]]></category>
		<category><![CDATA[ria]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://my.center-of.info/?p=82</guid>
		<description><![CDATA[Seit dem 04.12.2008 gibt es nun endlich die Version 1.0 von JavaFX. JavaFX ist eine Plattform um Rich Internet Applications für verschiedene End-Geräte zu erstellen. Im Idealfall realisiert man eine Anwendung, die dann später im Browser, auf dem Desktop und auf dem mobilen Gerät läuft. Für weitere Details sei auf die JavaFX-Seiten verwiesen [1] und [...]]]></description>
			<content:encoded><![CDATA[<p>Seit dem 04.12.2008 gibt es nun endlich die Version 1.0 von <a title="SUN JavaFX" href="http://www.javafx.com/" target="_blank">JavaFX</a>. JavaFX ist eine Plattform um Rich Internet Applications für verschiedene End-Geräte zu erstellen. Im Idealfall realisiert man eine Anwendung, die dann später im Browser, auf dem Desktop und auf dem mobilen Gerät läuft. Für weitere Details sei auf die JavaFX-Seiten verwiesen [1] und [2].</p>
<p><span id="more-82"></span></p>
<p><strong>Überblick</strong></p>
<p>Um JavaFX-Anwendung zu nutzen, braucht man standardmäßig nur die aktuelle Java Version. Hier ist Java 1.6.0_11 [3] passend, da diese Version die Fähigkeit anbietet, Applets auf den Desktop zu ziehen. Beim ersten Aufruf einer JavaFX-Anwendung werden die Runtime-Bibliotheken beim ersten Mal runtergeladen, wenn sie nicht vorhanden sind. Bei entsprechender Implimentierung der JavaFX-Anwendung (was ja ein Applet ist), kann man sich das Applet auf den Desktop ziehen. Schließt man dann den Browser, bekommt man die Möglichkeit ein Verweis auf den Desktop zu erstellen, um später das Applet &#8211; und nur das Applet, nicht auch den Browser &#8211; wieder zu nutzen.</p>
<p>JavaFX kommt auch mit einer neuen Script-Sprache, dem JavaFX Script. JavaFX Script ist eine deklarative kompilierbare Scriptsprache, was auch type inference &#8211; und somit implizit auch statische Typen &#8211; anbietet.</p>
<p><strong>Entwicklung</strong></p>
<p>Zur Entwicklung. Sun setzt ja bekanntlich auf Netbeans. Das bedeutet in dem Fall, es gibt ein Netbeans-Version [4] mit integriertem JavaFX. Diese Version beinhaltet das JavaFX Software Development Kit, Beispiele und bei Windows noch den JavaFX Mobile Emulator.</p>
<p>Zusätzlich gibt es Plugins für Photoshop und Adobe Illustrator. Mit JavaFX sollen ja auch schöne GUIs erstellt werden und hierfür bietet man Grafikern eine einfache Möglichkeit dies in ihren bekannten Umgebungen zu erstellen. Wie gut diese Plugins funktionieren, kann ich leider nicht sagen.</p>
<p>Für Eclipse-Nutzer gibt es ein veraltetes Plugin [5], hier ist zu hoffen, dass demnächst eine aktuellere Version veröffentlich wird.</p>
<p>Mit Netbeans kann man jedenfalls recht einfach erste JavaFX Anwendungen realisieren. Für die grafische Darstellung kann man eine Palette von vorhandenen Mustern, Transformationen etc nutzen. Jedoch gibt es hier keinen visuellen Designer. Die Palette beinhaltet nur Code-Fragmente, die in den existierenden Code eingefügt werden können. Ob es hier einen Designer geben wird, ist fraglich, da entsprechen Photoshop/Illustrator Plugins existieren.</p>
<p><strong>Features</strong></p>
<p>Die Features dürfen nun auch nicht vergessen werden:</p>
<ul>
<li>RIA Plattform für verschiedene Endgeräte</li>
<li>Einfache Integration für Grafiker</li>
<li>Gute Unterstützung von Grafiken, 2D, 3D, Video, Audio</li>
<li>Zugang zu Java-Bibliotheken</li>
</ul>
<p>Für weitere Details sei auf die Überblicks-Seite in [1] verwiesen.</p>
<p>Links:<br />
[1] JavaFX Überblick: <a title="SUN JavaFX Überblick" href="http://javafx.com/about/overview/" target="_blank">http://javafx.com/about/overview/ </a><br />
[2] JavaFX Getting Started with the Technology: <a title="Getting Started with JavaFX Technology" href="http://javafx.com/docs/gettingstarted/javafx/" target="_blank">http://javafx.com/docs/gettingstarted/javafx/</a><br />
[3] Java SE 6 Update Release Notes: <a title="SUN Java6 Changelogs" href="http://java.sun.com/javase/6/webnotes/6u11.html" target="_blank">http://java.sun.com/javase/6/webnotes/6u11.html</a><br />
[4] JavaFX Download (for Windows): <a title="SUN JavaFX Download page" href="http://javafx.com/downloads/windows.jsp" target="_blank">http://javafx.com/downloads/windows.jsp</a><br />
[5] OpenJFX Eclipse Plugin v0.0.2: <a title="Altes Eclipse JavaFX Plugin" href="http://download.java.net/general/openjfx/plugins/eclipse/" target="_blank">http://download.java.net/general/openjfx/plugins/eclipse/</a><br />
[6] JavaFX API: <a title="SUN JavaFX API" href="http://java.sun.com/javafx/1/docs/api/index.html" target="_blank">http://java.sun.com/javafx/1/docs/api/index.html</a><br />
[7] JavaFX Script Language: <a title="SUN JavaFX Script Language" href="http://java.sun.com/javafx/1/tutorials/core/" target="_blank">http://java.sun.com/javafx/1/tutorials/core/</a><br />
[8] JavaFX Language Reference: <a title="Openjfx: JavaFX Language Reference" href="http://openjfx.java.sun.com/current-build/doc/reference/JavaFXReference.html" target="_blank">http://openjfx.java.sun.com/current-build/doc/reference/JavaFXReference.html</a><br />
[9] JavaFX Blog: <a title="SUN JavaFX Blog" href="http://blogs.sun.com/javafx/" target="_blank">http://blogs.sun.com/javafx/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://my.center-of.info/2008/12/07/javafx-10/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

