<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">
    <title>James Weaver’s JavaFX Blog</title>
    
    <link rel="alternate" type="text/html" href="http://learnjavafx.typepad.com/weblog/" />
    <id>tag:typepad.com,2003:weblog-1470928</id>
    <updated>2009-07-11T01:39:17-04:00</updated>
    <subtitle>Helping You Become a JavaFXpert</subtitle>
    <generator uri="http://www.typepad.com/">TypePad</generator>
    <link rel="self" href="http://feeds.feedburner.com/JamesWeaversJavafxBlog" type="application/atom+xml" /><feedburner:emailServiceId>JamesWeaversJavafxBlog</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry>
        <title>Sten Anderson Wins the JavaFX Coding Challenge with a Rockin App!</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JamesWeaversJavafxBlog/~3/1bHwRKuIt1I/sten-anderson-wins-the-javafx-coding-challenge-with-a-rockin-app.html" />
        <link rel="replies" type="text/html" href="http://learnjavafx.typepad.com/weblog/2009/07/sten-anderson-wins-the-javafx-coding-challenge-with-a-rockin-app.html" thr:count="1" thr:updated="2009-07-11T15:37:10-04:00" />
        <id>tag:typepad.com,2003:post-6a00e54f133d698834011570feaf04970c</id>
        <published>2009-07-11T01:39:17-04:00</published>
        <updated>2009-07-11T01:49:36-04:00</updated>
        <summary>Congratulations to the winners of the JavaFX Coding Challenge: Sten Anderson, Naoaki Suganuma, and Evgeni Sergeev! The apps written by all three winners are oustanding, and 1st-place winner Sten Anderson's Music Explorer FX app is IMHO brilliant! Here's a screenshot from the app: Sten's JavaFX app enables the user to navigate among musical artists whose music has a degree of...</summary>
        <author>
            <name>Jim Weaver</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="Cool JavaFX Stuff" />
        <category scheme="http://www.sixapart.com/ns/types#category" term="JavaFX - General" />
        <category scheme="http://www.sixapart.com/ns/types#category" term="JavaFX Apps" />
        
        
<content type="html" xml:lang="en-US" xml:base="http://learnjavafx.typepad.com/weblog/">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;Congratulations to the winners of the &lt;a href="http://javafx.com/challenge/" target="_blank"&gt;JavaFX Coding Challenge&lt;/a&gt;: Sten Anderson, Naoaki Suganuma, and Evgeni Sergeev!  The apps written by all three winners are oustanding, and 1st-place winner &lt;a href="http://blogs.citytechinc.com/sanderson/" target="_blank"&gt;Sten Anderson's&lt;/a&gt; &lt;a href="http://ria.citytechinc.com/javafx/MusicExplorerFX/v1_0/MusicExplorerFX.jnlp"&gt;Music Explorer FX app&lt;/a&gt; is IMHO brilliant!  Here's a screenshot from the app:&lt;/p&gt;&lt;p&gt;&lt;a href="http://ria.citytechinc.com/javafx/MusicExplorerFX/v1_0/MusicExplorerFX.jnlp"&gt;&lt;img alt="MusicExplorerFX" class="at-xid-6a00e54f133d698834011570fea636970c " src="http://learnjavafx.typepad.com/.a/6a00e54f133d698834011570fea636970c-500wi"&gt;&lt;/img&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Sten's JavaFX app enables the user to navigate among musical artists whose music has a degree of similarity by making use of &lt;a href="http://the.echonest.com/" target="_blank"&gt;Echo Nest&lt;/a&gt; web services.  The Music Explorer FX app has a graphically pleasing user interface that helps the user explore interesting details about musical artists and the connections between them.  The Help page even features one of my favorite groups: &lt;a href="http://en.wikipedia.org/wiki/Liquid_tension_experiment" target="_blank"&gt;Liquid Tension Experiment&lt;/a&gt; :-)&lt;/p&gt;&#xD;
&#xD;
&lt;script type="text/javascript"&gt;var dzone_url = 'http://learnjavafx.typepad.com/weblog/2009/07/sten-anderson-wins-the-javafx-coding-challenge-with-a-rockin-app.html';&lt;/script&gt;&#xD;
&lt;script type="text/javascript"&gt;var dzone_title = 'Sten Anderson Wins the JavaFX Coding Challenge with a Rockin App!';&lt;/script&gt;&#xD;
&lt;script type="text/javascript"&gt;var dzone_blurb = '[blurb]';&lt;/script&gt;&#xD;
&lt;script type="text/javascript"&gt;var dzone_style = '2';&lt;/script&gt;&#xD;
&lt;script src="http://widgets.dzone.com/widgets/zoneit.js"&gt;&lt;/script&gt;&#xD;
&#xD;
&lt;p&gt;Congrats again to Sten, Naoaki and Evgen!&lt;/p&gt;&lt;p&gt;Jim Weaver&lt;/p&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?a=1bHwRKuIt1I:NtzBVT30IPs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?a=1bHwRKuIt1I:NtzBVT30IPs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?i=1bHwRKuIt1I:NtzBVT30IPs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?a=1bHwRKuIt1I:NtzBVT30IPs:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?i=1bHwRKuIt1I:NtzBVT30IPs:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?a=1bHwRKuIt1I:NtzBVT30IPs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?i=1bHwRKuIt1I:NtzBVT30IPs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JamesWeaversJavafxBlog/~4/1bHwRKuIt1I" height="1" width="1"/&gt;</content>


    <feedburner:origLink>http://learnjavafx.typepad.com/weblog/2009/07/sten-anderson-wins-the-javafx-coding-challenge-with-a-rockin-app.html</feedburner:origLink></entry>
    <entry>
        <title>Making Music (and Software) with My Friends in JavaFX</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JamesWeaversJavafxBlog/~3/8UBCaddhNTE/making-music-and-software-with-my-friends-in-javafx.html" />
        <link rel="replies" type="text/html" href="http://learnjavafx.typepad.com/weblog/2009/07/making-music-and-software-with-my-friends-in-javafx.html" thr:count="4" thr:updated="2009-07-10T13:15:46-04:00" />
        <id>tag:typepad.com,2003:post-6a00e54f133d698834011571e71429970b</id>
        <published>2009-07-09T18:43:03-04:00</published>
        <updated>2009-07-10T02:44:59-04:00</updated>
        <summary>It's great to finally be able to give you some details about a cool JavaFX project in which I've had the privilege of participating. For the last couple of months, some co-workers at Veriana and I have been helping Indaba Music create an internet-based, collaborative recording studio named Indaba Console 2.0. The alpha release was this morning (July 9, 2009)...</summary>
        <author>
            <name>Jim Weaver</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="Cool JavaFX Stuff" />
        <category scheme="http://www.sixapart.com/ns/types#category" term="JavaFX - General" />
        <category scheme="http://www.sixapart.com/ns/types#category" term="JavaFX Tips and Tricks" />
        <category scheme="http://www.sixapart.com/ns/types#category" term="Multi-tier JavaFX Script Apps" />
        
        
<content type="html" xml:lang="en-US" xml:base="http://learnjavafx.typepad.com/weblog/">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;It's great to finally be able to give you some details about a cool JavaFX project in which I've had the privilege of participating.  For the last couple of months, some co-workers at Veriana and I have been helping &lt;a href="http://www.indabamusic.com" target="_blank"&gt;Indaba Music&lt;/a&gt; create an internet-based, collaborative recording studio named Indaba Console 2.0.  The alpha release was this morning (July 9, 2009) and it is written entirely in JavaFX/Java.  Check out this screenshot, and &lt;a href="http://www.wired.com/epicenter/2009/07/indaba-supercharges-cloud-based-recording-studio/" target="_blank"&gt;a Wired article&lt;/a&gt; that contains a demonstration video by musician and co-founder Dan Zaccagnino.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.indabamusic.com" style="display: inline;" target="_blank"&gt;&lt;img alt="IndabaConsole" border="0" class="at-xid-6a00e54f133d698834011571e71d85970b image-full " src="http://learnjavafx.typepad.com/.a/6a00e54f133d698834011571e71d85970b-800wi" title="IndabaConsole"&gt;&lt;/img&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;If you were at JavaOne 2009 you may remember the JavaFX panel session on which Chris Danzig (Indaba co-founder) and I participated.&lt;/p&gt;&lt;p&gt;One of the main reasons that Indaba chose JavaFX/Java is that it enables recording high-quality audio directly onto the client platform.  This is achieved by leveraging the capability of JavaFX to call Java methods, and Java to call JavaFX functions.  One person with whom we work closely is &lt;a href="http://www.bjornroche.com" target="_blank"&gt;Bjorn Roche&lt;/a&gt;, who created a Java-based facility and API that interacts with the audio capabilities of the client machine.  The JavaFX portion of the Console provides most of the UI, and uses the Java-based API when it needs to play a track, apply audio effects, render a sound-wave, or record music.  This Java library then invokes JavaFX callback functions as it is doing its work.&lt;/p&gt;&lt;p&gt;The UI consists of many custom components, some of which subclass CustomNode, and many which subclass Contol (when skinnable and/or highly interactive components are required).  Recording session, mix, and audio data are stored "in the cloud", as they say.  The application is written in JavaFX 1.1, but is being ported to JavaFX 1.2, where performance and memory usage are greatly optimized.&lt;/p&gt;&lt;p&gt;Congrats, and thanks to the Indaba folks!  Please give the &lt;a href="http://www.indabamusic.com" target="_blank"&gt;music console&lt;/a&gt; a whirl and unleash your musical creativity!&lt;/p&gt;&#xD;
&#xD;
&lt;script type="text/javascript"&gt;var dzone_url = 'http://learnjavafx.typepad.com/weblog/2009/07/making-music-and-software-with-my-friends-in-javafx.html';&lt;/script&gt;&#xD;
&lt;script type="text/javascript"&gt;var dzone_title = 'Making Music (and Software) with My Friends in JavaFX';&lt;/script&gt;&#xD;
&lt;script type="text/javascript"&gt;var dzone_blurb = '[blurb]';&lt;/script&gt;&#xD;
&lt;script type="text/javascript"&gt;var dzone_style = '2';&lt;/script&gt;&#xD;
&lt;script src="http://widgets.dzone.com/widgets/zoneit.js"&gt;&lt;/script&gt;&#xD;
&#xD;
&lt;p&gt;Regards,&lt;/p&gt;&lt;p&gt;Jim Weaver&lt;/p&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?a=8UBCaddhNTE:S7T_L8oIcMM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?a=8UBCaddhNTE:S7T_L8oIcMM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?i=8UBCaddhNTE:S7T_L8oIcMM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?a=8UBCaddhNTE:S7T_L8oIcMM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?i=8UBCaddhNTE:S7T_L8oIcMM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?a=8UBCaddhNTE:S7T_L8oIcMM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?i=8UBCaddhNTE:S7T_L8oIcMM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JamesWeaversJavafxBlog/~4/8UBCaddhNTE" height="1" width="1"/&gt;</content>


    <feedburner:origLink>http://learnjavafx.typepad.com/weblog/2009/07/making-music-and-software-with-my-friends-in-javafx.html</feedburner:origLink></entry>
    <entry>
        <title>Leveraging JFXtras and Freebase with JavaFX to Create BandmatesFX</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JamesWeaversJavafxBlog/~3/OEGWASajhxI/leveraging-jfxtras-and-freebase-with-javafx-to-create-bandmatesfx.html" />
        <link rel="replies" type="text/html" href="http://learnjavafx.typepad.com/weblog/2009/07/leveraging-jfxtras-and-freebase-with-javafx-to-create-bandmatesfx.html" thr:count="0" />
        <id>tag:typepad.com,2003:post-6a00e54f133d698834011571c4644c970b</id>
        <published>2009-07-05T23:01:17-04:00</published>
        <updated>2009-07-06T14:32:54-04:00</updated>
        <summary>Long-time readers of this blog will remember some JavaFX examples in which I query the Freebase.com database, which holds structured information on just about any topic. Today's post uses JavaFX, with some help from the JFXtras open source project, to query the Freebase database for groups that an artist has played with, and for the artists that have played in...</summary>
        <author>
            <name>Jim Weaver</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="Cool JavaFX Stuff" />
        <category scheme="http://www.sixapart.com/ns/types#category" term="Freebase Contributing Artists App" />
        <category scheme="http://www.sixapart.com/ns/types#category" term="JavaFX SDK 1.2" />
        <category scheme="http://www.sixapart.com/ns/types#category" term="JFXtras" />
        
        
<content type="html" xml:lang="en-US" xml:base="http://learnjavafx.typepad.com/weblog/">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;Long-time readers of this blog will remember some JavaFX examples in which I query the &lt;a href="http://freebase.com" target="_blank"&gt;Freebase.com &lt;/a&gt;database, which holds structured information on just about any topic.  Today's post uses JavaFX, with some help from the &lt;a href="http://jfxtras.org" target="_blank"&gt;JFXtras&lt;/a&gt; &lt;a href="http://code.google.com/p/jfxtras/" target="_blank"&gt;open source project&lt;/a&gt;, to query the Freebase database for groups that an artist has played with, and for the artists that have played in those groups.  For example, the screenshot of the BandmatesFX app below shows the results of querying this info on Eric Clapton:&lt;/p&gt;&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;&lt;a href="http://jmentor.com/JavaFX_1-2/BandmatesFX/BandmatesFX.jnlp" style="display: inline;"&gt;&lt;img alt="BandmatesFX_clapton" border="0" class="at-xid-6a00e54f133d698834011571c6b219970b image-full " src="http://learnjavafx.typepad.com/.a/6a00e54f133d698834011571c6b219970b-800wi" title="BandmatesFX_clapton"&gt;&lt;/img&gt;&lt;/a&gt; &lt;br&gt;&lt;/span&gt; &lt;/p&gt;&lt;p&gt;To indicate which artist you'd like to query, type the Freebase ID (which as shown above is usually their Wikipedia ID with &lt;strong&gt;"/en/"&lt;/strong&gt; appended to the beginning).  Pressing the &lt;strong&gt;Enter &lt;/strong&gt;key or clicking the &lt;strong&gt;Search&lt;/strong&gt; button initiates the search, which sends a query articulated in the JSON-based &lt;a href="http://www.freebase.com/make" target="_blank"&gt;Metaweb Query Language&lt;/a&gt; (MQL)  The left column of the grid shows the groups that Clapton has played in, and the other images in each row are the artists that have played with that row's group.  Hovering over an image of a band or artist causes the name (in this case Steve Winwood) to appear at the top of the app.&lt;/p&gt;&lt;p&gt;Clicking on an artist performs the same behavior described above on the chosen artist, resulting in the following screenshot that shows bands and artists that Winwood has played with.&lt;/p&gt;&lt;p&gt;&lt;a href="http://jmentor.com/JavaFX_1-2/BandmatesFX/BandmatesFX.jnlp" style="display: inline;"&gt;&lt;img alt="BandmatesFX_winwood" border="0" class="at-xid-6a00e54f133d698834011570d0e0db970c image-full " src="http://learnjavafx.typepad.com/.a/6a00e54f133d698834011570d0e0db970c-800wi" title="BandmatesFX_winwood"&gt;&lt;/img&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Clicking Dave Mason (who was a bandmate with Steve Winwood in Traffic) as shown above will produce the bands and artists with which he has played, ad infinitum.&lt;/p&gt;&lt;p&gt;One of the key enablers of this application is the JSONHandler class (developed by Jim Clarke) found in the JFXtras project.  Take a look at the following listing of the main script in this application to see how it is used.&lt;/p&gt;&#xD;
&#xD;
&lt;pre&gt;/*&lt;br&gt; * BandmatesMain.fx&lt;br&gt; *&lt;br&gt; * Uses Freebase and JFXtras with JavaFX to explore connections&lt;br&gt; * between musical artists&lt;br&gt; *&lt;br&gt; * Developed by James L. Weaver to demonstrate using JavaFX and JFXtras&lt;br&gt; */&lt;br&gt;&lt;br&gt;package javafxpert;&lt;br&gt;&lt;br&gt;import javafx.io.http.HttpRequest;&lt;br&gt;import javafx.scene.Scene;&lt;br&gt;import javafx.scene.control.Button;&lt;br&gt;import javafx.scene.control.Label;&lt;br&gt;import javafx.scene.control.ProgressIndicator;&lt;br&gt;import javafx.scene.control.TextBox;&lt;br&gt;import javafx.scene.image.*;&lt;br&gt;import javafx.scene.input.*;&lt;br&gt;import javafx.scene.layout.HBox;&lt;br&gt;import javafx.scene.layout.VBox;&lt;br&gt;import javafx.scene.text.*;&lt;br&gt;import javafx.stage.Stage;&lt;br&gt;&lt;br&gt;import org.jfxtras.data.pull.*;&lt;br&gt;import org.jfxtras.scene.layout.*;&lt;br&gt;&lt;br&gt;/**&lt;br&gt; * Artist for which we're searching bandmates&lt;br&gt; */&lt;br&gt;var artistToSearch:String = "/en/eric_clapton";&lt;br&gt;&lt;br&gt;/**&lt;br&gt; * Hover text that contains the name of the artist or group&lt;br&gt; */&lt;br&gt;var nameHoverText:String;&lt;br&gt;&lt;br&gt;/**&lt;br&gt; * A reference to the HTTP request, for the purpose of monitoring progress&lt;br&gt; */&lt;br&gt;var req:HttpRequest;&lt;br&gt;&lt;br&gt;/**&lt;br&gt; * The root class that will hold the object graph from the JSON results&lt;br&gt; */&lt;br&gt;var freebaseResult:FreebaseResult;&lt;br&gt;&lt;br&gt;/**&lt;br&gt; * The base URL for the freebase query&lt;br&gt; */&lt;br&gt;def freebaseURL = "http://www.freebase.com/api/service/mqlread?";&lt;br&gt;&lt;br&gt;/**&lt;br&gt; * The base URL for a freebase image&lt;br&gt; */&lt;br&gt;def freebaseImageURL = "http://img.freebase.com/api/trans/image_thumb";&lt;br&gt;&lt;br&gt;/**&lt;br&gt; * Create the Freebase query and invoke the JSON handler&lt;br&gt; */&lt;br&gt;function obtainGroupsForArtist(artistFreebaseId:String) {&lt;br&gt;  artistToSearch = artistFreebaseId;&lt;br&gt;  var queryUrl = "{freebaseURL}query=\{\"query\":"&lt;br&gt;    " \{ "&lt;br&gt;    "   \"/common/topic/image\": [\{ "&lt;br&gt;    "     \"id\": null "&lt;br&gt;    "   \}], "&lt;br&gt;    "   \"/music/group_member/membership\": [\{ "&lt;br&gt;    "     \"group\": \{ "&lt;br&gt;    "       \"name\": null, "&lt;br&gt;    "       \"id\":   null, "&lt;br&gt;    "       \"/common/topic/image\": [\{ "&lt;br&gt;    "         \"id\": null "&lt;br&gt;    "       \}], "&lt;br&gt;    "       \"/music/musical_group/member\": [\{ "&lt;br&gt;    "         \"member\": \{ "&lt;br&gt;    "           \"name\": null, "&lt;br&gt;    "           \"id\":   null, "&lt;br&gt;    "           \"/common/topic/image\": [\{ "&lt;br&gt;    "             \"id\": null "&lt;br&gt;    "           \}] "&lt;br&gt;    "         \} "&lt;br&gt;    "       \}] "&lt;br&gt;    "     \} "&lt;br&gt;    "   \}], "&lt;br&gt;    "   \"id\":   \"{artistFreebaseId}\", "&lt;br&gt;    "   \"name\": null, "&lt;br&gt;    "   \"type\": \"/music/artist\" "&lt;br&gt;    " \} \}";&lt;br&gt;&lt;br&gt;  println("queryUrl:{queryUrl}");&lt;br&gt;  var albumHandler:JSONHandler = JSONHandler {&lt;br&gt;    rootClass: "javafxpert.FreebaseResult"&lt;br&gt;    onDone: function(obj, isSequence): Void {&lt;br&gt;      freebaseResult = obj as FreebaseResult;&lt;br&gt;      println("# of bands:{sizeof freebaseResult.result.musicGroupMemberMembership}");&lt;br&gt;      req.stop();&lt;br&gt;    }&lt;br&gt;  };&lt;br&gt;  req = HttpRequest {&lt;br&gt;    location: queryUrl&lt;br&gt;    onInput: function(is: java.io.InputStream) {&lt;br&gt;      albumHandler.parse(is);&lt;br&gt;    }&lt;br&gt;  };&lt;br&gt;  req.start();&lt;br&gt;}&lt;br&gt;&lt;br&gt;Stage {&lt;br&gt;  title: "BandmatesFX"&lt;br&gt;  scene: Scene {&lt;br&gt;    width: 1000&lt;br&gt;    height: 750&lt;br&gt;    content: [&lt;br&gt;      VBox {&lt;br&gt;        layoutX: 10&lt;br&gt;        layoutY: 10&lt;br&gt;        spacing: 10&lt;br&gt;        content: [&lt;br&gt;          HBox {&lt;br&gt;            spacing: 10&lt;br&gt;            content: [&lt;br&gt;              ImageView {&lt;br&gt;                image: bind Image {&lt;br&gt;                  url: "{freebaseImageURL}{artistToSearch}?maxheight=80"&lt;br&gt;                }&lt;br&gt;              },&lt;br&gt;              TextBox {&lt;br&gt;                text: bind artistToSearch with inverse&lt;br&gt;                columns: 20&lt;br&gt;                font: Font.font("arial", 14)&lt;br&gt;                action:function():Void {&lt;br&gt;                  obtainGroupsForArtist(artistToSearch);&lt;br&gt;                }&lt;br&gt;              },&lt;br&gt;              Button {&lt;br&gt;                text: "Search"&lt;br&gt;                strong: true&lt;br&gt;                action:function():Void {&lt;br&gt;                  obtainGroupsForArtist(artistToSearch);&lt;br&gt;                }&lt;br&gt;              },&lt;br&gt;              ProgressIndicator {&lt;br&gt;                progress: bind req.progress&lt;br&gt;              },&lt;br&gt;              Label {&lt;br&gt;                text: bind nameHoverText&lt;br&gt;                font: Font.font("arial", FontWeight.BOLD, 18)&lt;br&gt;              }&lt;br&gt;            ]&lt;br&gt;          },&lt;br&gt;          Grid {&lt;br&gt;            rows: bind for (grp in freebaseResult.result.musicGroupMemberMembership)&lt;br&gt;              Row {&lt;br&gt;                cells: [&lt;br&gt;                  ImageView {&lt;br&gt;                    image: Image {&lt;br&gt;                      url: "{freebaseImageURL}{grp.group.id}?maxheight=80"&lt;br&gt;                    }&lt;br&gt;                    onMouseEntered:function(me:MouseEvent):Void {&lt;br&gt;                      nameHoverText = grp.group.name;&lt;br&gt;                    }&lt;br&gt;                    onMouseExited:function(me:MouseEvent):Void {&lt;br&gt;                      nameHoverText = "";&lt;br&gt;                    }&lt;br&gt;                  },&lt;br&gt;                  for (mmbr in freebaseResult.result.&lt;br&gt;                               musicGroupMemberMembership[indexof grp].&lt;br&gt;                               group.musicMusicalGroupMember)&lt;br&gt;                    ImageView {&lt;br&gt;                      image: Image {&lt;br&gt;                        url: "{freebaseImageURL}{mmbr.member.id}?maxheight=80"&lt;br&gt;                        backgroundLoading: true&lt;br&gt;                      }&lt;br&gt;                      onMousePressed:function(me:MouseEvent):Void {&lt;br&gt;                        artistToSearch = mmbr.member.id;&lt;br&gt;                        obtainGroupsForArtist(mmbr.member.id);&lt;br&gt;                      }&lt;br&gt;                      onMouseEntered:function(me:MouseEvent):Void {&lt;br&gt;                        nameHoverText = mmbr.member.name;&lt;br&gt;                      }&lt;br&gt;                      onMouseExited:function(me:MouseEvent):Void {&lt;br&gt;                        nameHoverText = "";&lt;br&gt;                      }&lt;br&gt;                    }&lt;br&gt;                ]&lt;br&gt;              }&lt;br&gt;          }&lt;br&gt;        ]&lt;br&gt;      }&lt;br&gt;    ]&lt;br&gt;  }&lt;br&gt;}&lt;br&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;As you can see in the listing above, we construct an MQL query that will return information about the bands, and the artists that have played in those bands.  We then supply the &lt;strong&gt;JSONHandler &lt;/strong&gt;with a &lt;strong&gt;rootClass&lt;/strong&gt;, an instance of which will be created and populated with a graph of objects that represents the JSON stream returned from the Freebase server.  JSONHandler uses JavaFX reflection to create instances of classes that correspond to each element name, shown below:&lt;/p&gt;&#xD;
&#xD;
&lt;pre&gt;package javafxpert;&lt;br&gt;public class FreebaseResult {&lt;br&gt;    public var code: String;&lt;br&gt;    public var result: Result;&lt;br&gt;    public var status: String;&lt;br&gt;    public var transactionId: String;&lt;br&gt;}&lt;br&gt;&lt;br&gt;&lt;br&gt;package javafxpert;&lt;br&gt;public class Result {&lt;br&gt;    public var commonTopicImage: ArtistImage[] ;&lt;br&gt;    public var musicGroupMemberMembership: MusicGroupMemberMembership[];&lt;br&gt;    public var id: String;&lt;br&gt;    public var name: String;&lt;br&gt;    public var type: String;&lt;br&gt;}&lt;br&gt;&lt;br&gt;&lt;br&gt;package javafxpert;&lt;br&gt;public class ArtistImage {&lt;br&gt;    public var id: String;&lt;br&gt;}&lt;br&gt;&lt;br&gt;&lt;br&gt;package javafxpert;&lt;br&gt;public class MusicGroupMemberMembership {&lt;br&gt;    public var group: Group;&lt;br&gt;}&lt;br&gt;&lt;br&gt;&lt;br&gt;package javafxpert;&lt;br&gt;public class Group {&lt;br&gt;    public var commonTopicImage: ArtistImage[] ;&lt;br&gt;    public var musicMusicalGroupMember: MusicMusicalGroupMember[];&lt;br&gt;    public var name: String on replace {&lt;br&gt;      name = name.replaceAll("&amp;amp;", "&amp;amp;");&lt;br&gt;    };&lt;br&gt;    public var id: String;&lt;br&gt;}&lt;br&gt;&lt;br&gt;&lt;br&gt;package javafxpert;&lt;br&gt;public class MusicMusicalGroupMember {&lt;br&gt;    public var member: Member;&lt;br&gt;}&lt;br&gt;&lt;br&gt;&lt;br&gt;package javafxpert;&lt;br&gt;public class Member {&lt;br&gt;    public var commonTopicImage: ArtistImage[] ;&lt;br&gt;    public var name: String on replace {&lt;br&gt;      name = name.replaceAll("&amp;amp;", "&amp;amp;");&lt;br&gt;    };&lt;br&gt;    public var id: String;&lt;br&gt;}&lt;br&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;br&gt;As you can see, &lt;strong&gt;JSONHandler &lt;/strong&gt;makes quick work out of populating object graphs from JSON streams, doing the heavy lifting for you.&lt;/p&gt;&lt;p&gt;Another facility of the JFXtras project that we're using is the Grid layout container, as shown previously in the &lt;strong&gt;BandmatesMain.fx&lt;/strong&gt; code listing above.  While you're looking at that listing, notice how easy it is in JavaFX 1.2 to create a &lt;strong&gt;ProgressIndicator &lt;/strong&gt;that reflects the progress of a task such as  &lt;strong&gt;HttpRequest&lt;/strong&gt;.&lt;/p&gt;&lt;p&gt;To get the most out of this post, please build and run this application, putting the JFXtras JAR file (that you can get from the &lt;a href="http://jfxtras.org" target="_blank"&gt;JFXtras&lt;/a&gt; Core &lt;a href="http://code.google.com/p/jfxtras/" target="_blank"&gt;open source project&lt;/a&gt;) on the classpath.  If you'd like to short-circuit the JavaFX learning process, click this Java Web Start link:  &lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;a href="http://jmentor.com/JavaFX_1-2/BandmatesFX/BandmatesFX.jnlp"&gt;&lt;img alt="Webstartsmall2" border="0" height="34" src="http://learnjavafx.typepad.com/weblog/images/2008/07/23/webstartsmall2.gif" title="Webstartsmall2" width="88"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;Also, this is the first cut of the BandmatesFX app, so please leave a comment with ideas for additional features.  And if you possess the graphics design gene (as I admittedly don't), I'd be honored if you'd create a mock-up to make this app look graphically pleasing.&lt;/p&gt;&#xD;
&#xD;
&#xD;
&lt;script type="text/javascript"&gt;var dzone_url = 'http://learnjavafx.typepad.com/weblog/2009/07/leveraging-jfxtras-and-freebase-with-javafx-to-create-bandmatesfx.html';&lt;/script&gt;&#xD;
&lt;script type="text/javascript"&gt;var dzone_title = 'Leveraging JFXtras and Freebase with JavaFX to Create BandmatesFX';&lt;/script&gt;&#xD;
&lt;script type="text/javascript"&gt;var dzone_blurb = '[blurb]';&lt;/script&gt;&#xD;
&lt;script type="text/javascript"&gt;var dzone_style = '2';&lt;/script&gt;&#xD;
&lt;script src="http://widgets.dzone.com/widgets/zoneit.js"&gt;&lt;/script&gt;&#xD;
&#xD;
&lt;p&gt;Regards,&lt;/p&gt;&lt;p&gt;Jim Weaver&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?a=OEGWASajhxI:wv71EAyT_t8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?a=OEGWASajhxI:wv71EAyT_t8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?i=OEGWASajhxI:wv71EAyT_t8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?a=OEGWASajhxI:wv71EAyT_t8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?i=OEGWASajhxI:wv71EAyT_t8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?a=OEGWASajhxI:wv71EAyT_t8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?i=OEGWASajhxI:wv71EAyT_t8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JamesWeaversJavafxBlog/~4/OEGWASajhxI" height="1" width="1"/&gt;</content>


    <feedburner:origLink>http://learnjavafx.typepad.com/weblog/2009/07/leveraging-jfxtras-and-freebase-with-javafx-to-create-bandmatesfx.html</feedburner:origLink></entry>
    <entry>
        <title>Asynchronicity in JavaFX 1.2</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JamesWeaversJavafxBlog/~3/n3roTS1X2rY/background-tasks-in-javafx.html" />
        <link rel="replies" type="text/html" href="http://learnjavafx.typepad.com/weblog/2009/06/background-tasks-in-javafx.html" thr:count="4" thr:updated="2009-07-03T16:37:00-04:00" />
        <id>tag:typepad.com,2003:post-68390389</id>
        <published>2009-06-24T02:12:02-04:00</published>
        <updated>2009-06-24T18:26:20-04:00</updated>
        <summary>The asynchronous task model has been much improved in JavaFX 1.2. Not only does it have a simple and elegant API, but several of the asynchronous tasks (e.g. HttpRequest) in the JavaFX API now use this model. In addition, there are a couple of progress UI controls introduced in JavaFX 1.2, and they work well with the new asynchronous model....</summary>
        <author>
            <name>Jim Weaver</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="JavaFX - General" />
        <category scheme="http://www.sixapart.com/ns/types#category" term="JavaFX Mobile" />
        <category scheme="http://www.sixapart.com/ns/types#category" term="JavaFX SDK 1.2" />
        
        
<content type="html" xml:lang="en-US" xml:base="http://learnjavafx.typepad.com/weblog/">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;&lt;a href="http://learnjavafx.typepad.com/.a/6a00e54f133d698834011570599fb0970c-pi" style="float: right;"&gt;&lt;img alt="200px-Police-album-synchronicity" border="0" class="at-xid-6a00e54f133d698834011570599fb0970c " src="http://learnjavafx.typepad.com/.a/6a00e54f133d698834011570599fb0970c-800wi" style="margin: 0px 0px 5px 5px;" title="200px-Police-album-synchronicity"&gt;&lt;/img&gt;&lt;/a&gt; The asynchronous task model has been much improved in JavaFX 1.2.  Not only does it have a simple and elegant API, but several of the asynchronous tasks (e.g. HttpRequest) in the JavaFX API now use this model.  In addition, there are a couple of progress UI controls introduced in JavaFX 1.2, and they work well with the new asynchronous model.&lt;/p&gt;&lt;p&gt;The JavaFX package that contains the asynchronous-related classes is &lt;strong&gt;javafx.async&lt;/strong&gt;, and a good class to take a look at first is &lt;a href="http://java.sun.com/javafx/1.2/docs/api/javafx.async/javafx.async.JavaTaskBase.html" target="_blank"&gt;JavaTaskBase&lt;/a&gt;.  This class enables you to start a task, check on its progress, and be notified when the task has completed.  JavaFX is single threaded, so the task that is started is one that you define in a Java class (that implements the &lt;strong&gt;javafx.async.RunnableFuture&lt;/strong&gt; interface).  The Java class can then call functions of your JavaFX classes, demonstrating bi-directional integration between JavaFX and Java.&lt;/p&gt;&lt;p&gt;Take a look at the screenshot of a simple example on which Stephen Chin and I collaborated, that demonstrates the capabilities just described:&lt;/p&gt;&lt;p&gt;&lt;a href="http://learnjavafx.typepad.com/.a/6a00e54f133d6988340115714eda4a970b-pi" style="display: inline;"&gt;&lt;img alt="Async_progressbar" border="0" class="at-xid-6a00e54f133d6988340115714eda4a970b " src="http://learnjavafx.typepad.com/.a/6a00e54f133d6988340115714eda4a970b-800wi" title="Async_progressbar"&gt;&lt;/img&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Clicking on the &lt;strong&gt;Start the Task&lt;/strong&gt; button starts a new task and adds a &lt;strong&gt;ProgressBar &lt;/strong&gt;into the scene (up to a maximum of eight, the built-in limit on the number of tasks in JavaFX that can be run in parallel).  When a task completes, its ProgressBar is removed from the scene.  Take a look at the &lt;strong&gt;AsyncProgressMain.fx&lt;/strong&gt; script below to understand how the UI is drawn, and how the tasks are started:&lt;/p&gt;&#xD;
&#xD;
&lt;pre&gt;package projavafx.asyncprogress.ui;&lt;br&gt;&lt;br&gt;import projavafx.asyncprogress.model.*;&lt;br&gt;&lt;br&gt;import javafx.scene.*;&lt;br&gt;import javafx.scene.control.*;&lt;br&gt;import javafx.scene.layout.*;&lt;br&gt;import javafx.stage.Stage;&lt;br&gt;&lt;br&gt;var vbox:VBox;&lt;br&gt;&lt;br&gt;function startTask() {&lt;br&gt;  def progressBar:ProgressIndicator = ProgressBar {&lt;br&gt;    progress: bind taskController.floatProgress&lt;br&gt;  }&lt;br&gt;&lt;br&gt;  def taskController:TaskController = TaskController {&lt;br&gt;    maxProg: 100&lt;br&gt;    onStart:function():Void {&lt;br&gt;      insert progressBar into vbox.content;&lt;br&gt;    }&lt;br&gt;    onDone:function():Void {&lt;br&gt;      delete progressBar from vbox.content;&lt;br&gt;    }&lt;br&gt;  }&lt;br&gt;  taskController.start();&lt;br&gt;}&lt;br&gt;&lt;br&gt;Stage {&lt;br&gt;  title: "Async and Progress Example"&lt;br&gt;  scene: Scene {&lt;br&gt;    width: 200&lt;br&gt;    height: 250&lt;br&gt;    content: vbox = VBox {&lt;br&gt;      layoutX: 10&lt;br&gt;      layoutY: 10&lt;br&gt;      spacing: 10&lt;br&gt;      content: [&lt;br&gt;        Button {&lt;br&gt;          text: "Start the task"&lt;br&gt;          action: function():Void {&lt;br&gt;            println("Starting TaskController");&lt;br&gt;            startTask();&lt;br&gt;          }&lt;br&gt;        }&lt;br&gt;      ]&lt;br&gt;    }&lt;br&gt;  }&lt;br&gt;}&lt;br&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br&gt;Now take a look at the &lt;strong&gt;TaskController &lt;/strong&gt;class that is instantiated in the script above when the button is clicked:&lt;/p&gt;&#xD;
&#xD;
&lt;pre&gt;package projavafx.asyncprogress.model;&lt;br&gt;&lt;br&gt;import projavafx.asyncprogress.model.Ticker;&lt;br&gt;import javafx.async.RunnableFuture;&lt;br&gt;import javafx.async.JavaTaskBase;&lt;br&gt;&lt;br&gt;public class TaskController extends JavaTaskBase, TickerHandler {&lt;br&gt;  public var maxProg:Integer;&lt;br&gt;  public-read protected var floatProgress:Number;&lt;br&gt;&lt;br&gt;  override public function create():RunnableFuture {&lt;br&gt;    maxProgress = maxProg;&lt;br&gt;    return new Ticker(this);&lt;br&gt;  }&lt;br&gt;&lt;br&gt;  override public function onTick(tickNum:Integer):Void {&lt;br&gt;    progress = tickNum;&lt;br&gt;    floatProgress = percentDone / 100.0;&lt;br&gt;  }&lt;br&gt;}&lt;br&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;Note that the &lt;strong&gt;TaskController &lt;/strong&gt;class above extends the &lt;strong&gt;JavaTaskBase &lt;/strong&gt;class mentioned earlier.  We'll use its capabilities to start and monitor the task.  When the &lt;strong&gt;create &lt;/strong&gt;function of the &lt;strong&gt;TaskController&lt;/strong&gt; instance is called by the JavaFX runtime (as a result of its &lt;strong&gt;start &lt;/strong&gt;function being called) it creates a new instance of the &lt;strong&gt;Ticker &lt;/strong&gt;class that we developed in Java.  As shown in the code below, the &lt;strong&gt;Ticker &lt;/strong&gt;class implements the &lt;strong&gt;RunnableFuture &lt;/strong&gt;interface mentioned earlier.&lt;/p&gt;&#xD;
&#xD;
&lt;pre&gt;package projavafx.asyncprogress.model;&lt;br&gt;&lt;br&gt;import com.sun.javafx.functions.Function0;&lt;br&gt;import javafx.lang.FX;&lt;br&gt;import javafx.async.RunnableFuture;&lt;br&gt;&lt;br&gt;public class Ticker implements RunnableFuture {&lt;br&gt;  TickerHandler tickerHandler;&lt;br&gt;&lt;br&gt;  public Ticker (TickerHandler tickerHandler) {&lt;br&gt;    this.tickerHandler = tickerHandler;&lt;br&gt;  }&lt;br&gt;&lt;br&gt;  @Override public void run() {&lt;br&gt;    for (int i = 1; i &amp;lt;= 100; i++) {&lt;br&gt;      if (tickerHandler != null) {&lt;br&gt;        final int tick = i;&lt;br&gt;        FX.deferAction(new Function0&amp;lt;Void&amp;gt;() {&lt;br&gt;&lt;p&gt;           @Override public Void invoke() {&lt;br&gt;             tickerHandler.onTick(tick);&lt;br&gt;             return null;&lt;br&gt;           }&lt;br&gt;        });&lt;br&gt;      }&lt;br&gt;      try {&lt;br&gt;        Thread.sleep(200);&lt;br&gt;      }&lt;br&gt;      catch (InterruptedException te) {}&lt;br&gt;    }&lt;br&gt;    System.out.println("Ticker#run is finished");&lt;br&gt;  }&lt;br&gt;}&lt;/p&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;br&gt;The Ticker class shown above counts to 100, sleeping for a couple hundred milliseconds each iteration.  During each iteration it calls the &lt;strong&gt;onTick &lt;/strong&gt;function of the &lt;strong&gt;TaskController &lt;/strong&gt;class shown previously, which implements the &lt;strong&gt;TickerHandler &lt;/strong&gt;interface.  Here's the code for that interface:&lt;/p&gt;&#xD;
&#xD;
&lt;pre&gt;package projavafx.asyncprogress.model;&lt;br&gt;&lt;br&gt;public interface TickerHandler {&lt;br&gt;  void onTick(int tickNum);&lt;br&gt;}&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;br&gt;For an excellent explanation (including UML sequence diagrams) of asynchronous tasks in JavaFX, see &lt;a href="http://blogs.sun.com/baechul/entry/javafx_1_2_async" target="_blank"&gt;Baechul's JavaFX 1.2 Async blog post&lt;/a&gt;.  Also take a look at the Richard Bair and Jasper Potts &lt;a href="http://fxexperience.com/2009/06/background-tasks-in-javafx/" target="_blank"&gt;fxexperience.com post on the subject&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;For those interested in JavaFX Mobile, here's a &lt;a href="http://www.youtube.com/watch?v=nOLaB4xzg8o" target="_blank"&gt;short video clip of this example running on an HTC Diamond phone&lt;/a&gt;.  You may want to mute the audio, as I didn't mute the microphone when creating this video. ;-) &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=nOLaB4xzg8o" style="display: inline;" target="_blank"&gt;&lt;img alt="Async_progressbar_mobile" border="0" class="at-xid-6a00e54f133d6988340115705e36a3970c " src="http://learnjavafx.typepad.com/.a/6a00e54f133d6988340115705e36a3970c-800wi" title="Async_progressbar_mobile"&gt;&lt;/img&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;As I mentioned in the &lt;a href="http://learnjavafx.typepad.com/weblog/2009/06/animating-with-dynamic-timeline-values-in-javafx-scientific-fish-story-from-1901.html"&gt;dynamic Timeline values post&lt;/a&gt;, I'm trying to encourage you to compile and run the examples in this blog.  However, please leave a comment if you'd like a Java Web Start link.  &#xD;
&#xD;
&lt;/p&gt;&lt;script type="text/javascript"&gt;var dzone_url = 'http://learnjavafx.typepad.com/weblog/2009/06/background-tasks-in-javafx.html';&lt;/script&gt;&#xD;
&lt;script type="text/javascript"&gt;var dzone_title = 'Asynchronicity in JavaFX 1.2';&lt;/script&gt;&#xD;
&lt;script type="text/javascript"&gt;var dzone_blurb = '[blurb]';&lt;/script&gt;&#xD;
&lt;script type="text/javascript"&gt;var dzone_style = '2';&lt;/script&gt;&#xD;
&lt;script src="http://widgets.dzone.com/widgets/zoneit.js"&gt;&lt;/script&gt;&#xD;
&#xD;
&lt;p&gt;Regards,&lt;/p&gt;&lt;p&gt;Jim Weaver&lt;/p&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?a=n3roTS1X2rY:MxuRnXQhJNI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?a=n3roTS1X2rY:MxuRnXQhJNI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?i=n3roTS1X2rY:MxuRnXQhJNI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?a=n3roTS1X2rY:MxuRnXQhJNI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?i=n3roTS1X2rY:MxuRnXQhJNI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?a=n3roTS1X2rY:MxuRnXQhJNI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?i=n3roTS1X2rY:MxuRnXQhJNI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JamesWeaversJavafxBlog/~4/n3roTS1X2rY" height="1" width="1"/&gt;</content>


    <feedburner:origLink>http://learnjavafx.typepad.com/weblog/2009/06/background-tasks-in-javafx.html</feedburner:origLink></entry>
    <entry>
        <title>Animating with Dynamic Timeline Values in JavaFX ...and a Scientific Fish Story from 1901</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JamesWeaversJavafxBlog/~3/FKWSSJR9bM4/animating-with-dynamic-timeline-values-in-javafx-scientific-fish-story-from-1901.html" />
        <link rel="replies" type="text/html" href="http://learnjavafx.typepad.com/weblog/2009/06/animating-with-dynamic-timeline-values-in-javafx-scientific-fish-story-from-1901.html" thr:count="3" thr:updated="2009-06-26T08:59:42-04:00" />
        <id>tag:typepad.com,2003:post-68364503</id>
        <published>2009-06-22T11:42:43-04:00</published>
        <updated>2009-06-22T13:59:49-04:00</updated>
        <summary>A scientific fish story, published in 1901, reports that pike fish living in a tank were separated from minnows by a glass plate. After a while "a strike at the minnow had come to mean a bump on the nose... Instead of imputing their inability to the glass partition, they considered it some new and remarkable property of the minnows...</summary>
        <author>
            <name>Jim Weaver</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="JavaFX Script Animation" />
        <category scheme="http://www.sixapart.com/ns/types#category" term="JavaFX SDK 1.2" />
        
        
<content type="html" xml:lang="en-US" xml:base="http://learnjavafx.typepad.com/weblog/">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;&lt;a href="http://query.nytimes.com/mem/archive-free/pdf?res=9902E0D9143FE433A25756C2A96E9C946097D6CF" style="float: right;" target="_blank"&gt;&lt;img alt="ScientificFishStory" border="0" class="at-xid-6a00e54f133d6988340115704a8432970c " src="http://learnjavafx.typepad.com/.a/6a00e54f133d6988340115704a8432970c-800wi" style="margin: 0px 0px 5px 5px;" title="ScientificFishStory"&gt;&lt;/img&gt;&lt;/a&gt; A &lt;a href="http://query.nytimes.com/mem/archive-free/pdf?res=9902E0D9143FE433A25756C2A96E9C946097D6CF" target="_blank"&gt;scientific fish story&lt;/a&gt;, published in 1901, reports that pike fish living in a tank were separated from minnows by a glass plate.  After a while "a strike at the minnow had come to mean a bump on the nose... Instead of imputing their inability to the glass partition, they considered it some new and remarkable property of the minnows themselves."  Consequently the pike stopped trying to strike the minnows, even after the partition was removed.&lt;/p&gt;&lt;p&gt;I first heard that story when a speaker was illustrating the idea that we often get used to "the way things are", and consequently quit pursuing our passions and dreams.  But this isn't a motivational blog, so I'll stop the inspirational stuff right here and tie the fish story in with the subject of today's post :-)&lt;/p&gt;&lt;p&gt;If you've been developing in JavaFX for a while, you may have gotten used to the idea that dynamically changing values in &lt;strong&gt;Timeline &lt;/strong&gt;key frames don't work as expected.  I was in the same boat (tank?), and instead used the &lt;strong&gt;action &lt;/strong&gt;event handler of a KeyFrame when this kind of dynamic capability was required.  I was pleased to find out recently that this is no longer the case, by virtue of &lt;a href="http://javafx-jira.kenai.com/browse/RT-2985?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel" target="_blank"&gt;JIRA issue RT-2985&lt;/a&gt; being addressed.&lt;/p&gt;&lt;p&gt;As shown in the screenshot below, I've modified the &lt;a href="http://learnjavafx.typepad.com/weblog/2008/04/knowing-the-sta.html" target="_blank"&gt;Metronome example&lt;/a&gt; to demonstrate this capability:&lt;/p&gt;&lt;p&gt;&lt;a href="http://learnjavafx.typepad.com/.a/6a00e54f133d6988340115704a59c5970c-pi" style="display: inline;"&gt;&lt;img alt="MetronomeDynVals" border="0" class="at-xid-6a00e54f133d6988340115704a59c5970c " src="http://learnjavafx.typepad.com/.a/6a00e54f133d6988340115704a59c5970c-800wi" title="MetronomeDynVals"&gt;&lt;/img&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Taking a look at the code below, notice that clicking anywhere in the scene causes the values in the second KeyFrame of the Timeline to be assigned the coordinates of the mouse click.  The net effect is that one end of the blue line (which is bound to the variables that are interpolated by the timeline) move to where you clicked the mouse.  Here's the code listing for this example:&lt;/p&gt;&#xD;
&#xD;
&lt;pre&gt;/*&lt;br&gt; * MetronomeDynVals.fx - A simple example of animation using a Timeline&lt;br&gt; * with dynamic KeyFrame time and values.&lt;br&gt; *&lt;br&gt; * Developed 2009 by James L. Weaver jim.weaver [at] javafxpert.com&lt;br&gt; * as a JavaFX Script SDK 1.2 example&lt;br&gt; */&lt;br&gt;package projavafx.metronome1.ui;&lt;br&gt;&lt;br&gt;import javafx.animation.KeyFrame;&lt;br&gt;import javafx.animation.Interpolator;&lt;br&gt;import javafx.animation.Timeline;&lt;br&gt;import javafx.scene.Scene;&lt;br&gt;import javafx.scene.control.Button;&lt;br&gt;import javafx.scene.control.Slider;&lt;br&gt;import javafx.scene.input.MouseEvent;&lt;br&gt;import javafx.scene.shape.Line;&lt;br&gt;import javafx.scene.shape.Rectangle;&lt;br&gt;import javafx.scene.layout.HBox;&lt;br&gt;import javafx.scene.paint.Color;&lt;br&gt;import javafx.stage.Stage;&lt;br&gt;&lt;br&gt;var durMs:Number = 1000;&lt;br&gt;var xVal:Number = 100;&lt;br&gt;var yVal:Number = 50;&lt;br&gt;var endXVal:Number = 300;&lt;br&gt;var endYVal:Number = 50;&lt;br&gt;var anim = Timeline {&lt;br&gt;  keyFrames: [&lt;br&gt;    KeyFrame {&lt;br&gt;      time: 0ms&lt;br&gt;      values: [&lt;br&gt;        xVal =&amp;gt; 100,&lt;br&gt;        yVal =&amp;gt; 50&lt;br&gt;      ]&lt;br&gt;    },&lt;br&gt;    KeyFrame {&lt;br&gt;      time: bind 2000ms - (durMs * 1ms)&lt;br&gt;      values: [&lt;br&gt;        xVal =&amp;gt; endXVal tween Interpolator.LINEAR,&lt;br&gt;        yVal =&amp;gt; endYVal tween Interpolator.LINEAR&lt;br&gt;      ]&lt;br&gt;    },&lt;br&gt;    KeyFrame {&lt;br&gt;      time: bind (2000ms - (durMs * 1ms))*2&lt;br&gt;      values: [&lt;br&gt;        xVal =&amp;gt; 100,&lt;br&gt;        yVal =&amp;gt; 50&lt;br&gt;      ]&lt;br&gt;    }&lt;br&gt;  ]&lt;br&gt;  repeatCount: Timeline.INDEFINITE&lt;br&gt;};&lt;br&gt;&lt;br&gt;Stage {&lt;br&gt;  title: "Metronome Dynamic Values"&lt;br&gt;  visible: true&lt;br&gt;  scene: Scene {&lt;br&gt;    width: 400&lt;br&gt;    height: 500&lt;br&gt;    content: [&lt;br&gt;      Rectangle {&lt;br&gt;        width: 400&lt;br&gt;        height: 500&lt;br&gt;        fill: Color.TRANSPARENT&lt;br&gt;        onMousePressed: function(me:MouseEvent):Void {&lt;br&gt;          endXVal = me.x;&lt;br&gt;          endYVal = me.y;&lt;br&gt;        }&lt;br&gt;      },&lt;br&gt;      Line {&lt;br&gt;        startX: bind xVal&lt;br&gt;        startY: bind yVal&lt;br&gt;        endX: 200&lt;br&gt;        endY: 400&lt;br&gt;        strokeWidth: 4&lt;br&gt;        stroke: Color.BLUE&lt;br&gt;      },&lt;br&gt;      HBox {&lt;br&gt;        layoutX: 60&lt;br&gt;        layoutY: 420&lt;br&gt;        spacing: 10&lt;br&gt;        blocksMouse: true&lt;br&gt;        content: [&lt;br&gt;          Button {&lt;br&gt;            text: "Start"&lt;br&gt;            disable: bind anim.running&lt;br&gt;            action: function():Void {&lt;br&gt;              anim.playFromStart();&lt;br&gt;            }&lt;br&gt;          },&lt;br&gt;          Button {&lt;br&gt;            text: "Stop"&lt;br&gt;            disable: bind not anim.running&lt;br&gt;            action: function():Void {&lt;br&gt;              anim.stop();&lt;br&gt;            }&lt;br&gt;          },&lt;br&gt;          Slider {&lt;br&gt;            min: 100&lt;br&gt;            max: 2000&lt;br&gt;            width: 500&lt;br&gt;            value: bind durMs with inverse&lt;br&gt;          },&lt;br&gt;        ]&lt;br&gt;      }&lt;br&gt;    ]&lt;br&gt;  }&lt;br&gt;}&lt;br&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;br&gt;&lt;strong&gt;Dynamically Altering the time Variable of a KeyFrame&lt;br&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;In addition to dynamically changing the values of a KeyFrame, you can also alter the value of &lt;span style="font-weight: bold;"&gt;its &lt;/span&gt;&lt;strong&gt;time&lt;/strong&gt; variable.  To demonstrate this, the value of the &lt;strong&gt;Slider &lt;/strong&gt;is bi-directionally bound to a variable from which the &lt;strong&gt;time &lt;/strong&gt;value of the second KeyFrame is calculated.  Consequently, moving the slider changes the speed of the animation.&lt;/p&gt;&lt;p&gt;By the way, I didn't supply a Web Start link, because I'd like to encourage you to compile and run the application.  If you'd like a Web Start link, please leave a comment.&lt;/p&gt;&#xD;
&#xD;
&lt;script type="text/javascript"&gt;var dzone_url = 'http://learnjavafx.typepad.com/weblog/2009/06/animating-with-dynamic-timeline-values-in-javafx-scientific-fish-story-from-1901.html';&lt;/script&gt;&#xD;
&lt;script type="text/javascript"&gt;var dzone_title = 'Animating with Dynamic Timeline Values in JavaFX ...and a Scientific Fish Story from 1901';&lt;/script&gt;&#xD;
&lt;script type="text/javascript"&gt;var dzone_blurb = '[blurb]';&lt;/script&gt;&#xD;
&lt;script type="text/javascript"&gt;var dzone_style = '2';&lt;/script&gt;&#xD;
&lt;script src="http://widgets.dzone.com/widgets/zoneit.js"&gt;&lt;/script&gt;&#xD;
&#xD;
&lt;p&gt;Regards,&lt;/p&gt;&lt;p&gt;Jim Weaver&lt;/p&gt;&lt;p&gt;P.S. Thanks to &lt;a href="http://typicalisoverrated.blogspot.com/" target="_blank"&gt;Eric M. Smith&lt;/a&gt; (who *does* have a motivational blog) for adding a third KeyFrame to this example (see his comment to this post).  This addition makes the behavior more metronome-like, and if you click in the lower-right area the pendulum exhibits some John Travolta/Saturday Night Fever dance-action :-)&lt;/p&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?a=FKWSSJR9bM4:kOR3s-IQq-s:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?a=FKWSSJR9bM4:kOR3s-IQq-s:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?i=FKWSSJR9bM4:kOR3s-IQq-s:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?a=FKWSSJR9bM4:kOR3s-IQq-s:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?i=FKWSSJR9bM4:kOR3s-IQq-s:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?a=FKWSSJR9bM4:kOR3s-IQq-s:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?i=FKWSSJR9bM4:kOR3s-IQq-s:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JamesWeaversJavafxBlog/~4/FKWSSJR9bM4" height="1" width="1"/&gt;</content>


    <feedburner:origLink>http://learnjavafx.typepad.com/weblog/2009/06/animating-with-dynamic-timeline-values-in-javafx-scientific-fish-story-from-1901.html</feedburner:origLink></entry>
    <entry>
        <title>Create a News Ticker with JavaFX 1.2 RssTask/AtomTask</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JamesWeaversJavafxBlog/~3/4O7t5uCyUc4/javafx-rss-and-atom-task.html" />
        <link rel="replies" type="text/html" href="http://learnjavafx.typepad.com/weblog/2009/06/javafx-rss-and-atom-task.html" thr:count="5" thr:updated="2009-06-19T19:20:13-04:00" />
        <id>tag:typepad.com,2003:post-68239365</id>
        <published>2009-06-19T12:03:20-04:00</published>
        <updated>2009-06-19T14:45:06-04:00</updated>
        <summary>JavaFX 1.2 has many new features, not the least of which is a stone-simple way of reading RSS and Atom feeds. The new classes that contain much of this functionality are javafx.data.feed.rss.RssTask and javafx.data.feed.atom.AtomTask, respectively. Take a look at this post by Rakesh Menon that shows you how to create news tickers with these classes. Also, I'll give a free...</summary>
        <author>
            <name>Jim Weaver</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="JavaFX - General" />
        
        
<content type="html" xml:lang="en-US" xml:base="http://learnjavafx.typepad.com/weblog/">&lt;p&gt;&lt;a href="http://learnjavafx.typepad.com/.a/6a00e54f133d69883401157039ca4f970c-pi" style="float: right;"&gt;&lt;img alt="Stock_ticker" border="0" class="at-xid-6a00e54f133d69883401157039ca4f970c " src="http://learnjavafx.typepad.com/.a/6a00e54f133d69883401157039ca4f970c-800wi" style="margin: 0px 0px 5px 5px;" title="Stock_ticker"&gt;&lt;/img&gt;&lt;/a&gt; JavaFX 1.2 has&lt;a href="http://"&gt; &lt;/a&gt;&lt;a href="http://steveonjava.com/2009/05/31/javafx-1-2-top-10/" target="_blank"&gt;many new features&lt;/a&gt;, not the least of which is a stone-simple way of reading RSS and Atom feeds.  The new classes that contain much of this functionality are &lt;a href="http://java.sun.com/javafx/1.2/docs/api/javafx.data.feed.rss/javafx.data.feed.rss.RssTask.html" target="_blank"&gt;javafx.data.feed.rss.RssTask&lt;/a&gt; and &lt;a href="http://java.sun.com/javafx/1.2/docs/api/javafx.data.feed.atom/javafx.data.feed.atom.AtomTask.html" target="_blank"&gt;javafx.data.feed.atom.AtomTask&lt;/a&gt;, respectively.&lt;/p&gt;&lt;p&gt;Take a look at &lt;a href="http://blogs.sun.com/rakeshmenonp/entry/javafx_rss_and_atom_task" target="_blank"&gt;this post by Rakesh Menon&lt;/a&gt; that shows you how to create news tickers with these classes.&lt;/p&gt;&lt;p&gt;Also, I'll give a free copy of the &lt;a href="http://apress.com/book/view/1430218754" target="_blank"&gt;Pro JavaFX early access eBook&lt;/a&gt; (rewritten for 1.2) to the first person that leaves a comment with the name of the inventor of the Stock Ticker shown in the image above. :-)&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; We have two winners of the &lt;a href="http://apress.com/book/view/1430218754" target="_blank"&gt;Pro JavaFX early access eBook&lt;/a&gt;: Steve Sobczak, and Warren Strange (author of the &lt;a href="http://blogs.sun.com/warren/" target="_blank"&gt;Strange Brew blog&lt;/a&gt;).  Steve asserted that Edward A. Calahan invented the stock ticker, and Warren asserted that Thomas Edison did.  I'm giving a book to each of them, citing the &lt;a href="http://www.stocktickercompany.com/stc/universal/faq.php" target="_blank"&gt;following paragraph from The Stock Ticker Company&lt;/a&gt; web site:&lt;/p&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;"Edward A. Calahan invented the first stock ticker, which was introduced to the New York Stock Exchange in 1867. A young Thomas Edison improved on Calahan's design and made the stock ticker easier to use and maintain. It was Edison's first profitable innovation, and it introduced him to the powerful Wall Street businessmen who funded his subsequent inventions such as the phonograph, the light bulb, and motion pictures. It is the Universal Stock Ticker that we have reproduced."&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Congratulations Steve and Warren!&lt;/p&gt;&lt;p&gt;Regards,&lt;/p&gt;&lt;p&gt;Jim Weaver&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?a=4O7t5uCyUc4:sWogz0c_ngM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?a=4O7t5uCyUc4:sWogz0c_ngM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?i=4O7t5uCyUc4:sWogz0c_ngM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?a=4O7t5uCyUc4:sWogz0c_ngM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?i=4O7t5uCyUc4:sWogz0c_ngM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?a=4O7t5uCyUc4:sWogz0c_ngM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?i=4O7t5uCyUc4:sWogz0c_ngM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JamesWeaversJavafxBlog/~4/4O7t5uCyUc4" height="1" width="1"/&gt;</content>


    <feedburner:origLink>http://learnjavafx.typepad.com/weblog/2009/06/javafx-rss-and-atom-task.html</feedburner:origLink></entry>
    <entry>
        <title>Skinning Architecture in JavaFX -- straight from the horse's mouth</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JamesWeaversJavafxBlog/~3/PmNc0bqDzQM/skinning-architecture-in-javafx-straight-from-the-horses-mouth.html" />
        <link rel="replies" type="text/html" href="http://learnjavafx.typepad.com/weblog/2009/06/skinning-architecture-in-javafx-straight-from-the-horses-mouth.html" thr:count="0" />
        <id>tag:typepad.com,2003:post-68162201</id>
        <published>2009-06-17T06:00:00-04:00</published>
        <updated>2009-06-16T11:30:38-04:00</updated>
        <summary>No, I'm not calling Richard Bair a horse, but rather using an idiom that has its origins in horse racing. From The Phrase Finder: "In horse racing circles tips on which horse is a likely winner circulate amongst punters. The most trusted authorities are considered to be those in closest touch with the recent form of the horse, i.e. stable...</summary>
        <author>
            <name>Jim Weaver</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="JavaFX - General" />
        <category scheme="http://www.sixapart.com/ns/types#category" term="JavaFX SDK 1.2" />
        
        
<content type="html" xml:lang="en-US" xml:base="http://learnjavafx.typepad.com/weblog/">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;&lt;a href="http://fxexperience.com/2009/06/skinning-architecture-in-javafx/" style="float: right;" target="_blank"&gt;&lt;img alt="Skinlevels" border="0" class="at-xid-6a00e54f133d69883401157024f137970c " src="http://learnjavafx.typepad.com/.a/6a00e54f133d69883401157024f137970c-800wi" style="margin: 0px 0px 5px 5px;" title="Skinlevels"&gt;&lt;/img&gt;&lt;/a&gt; No, I'm not calling Richard Bair a horse, but rather using an idiom that has its origins in horse racing.  From &lt;a href="http://www.phrases.org.uk/meanings/336400.html" target="_blank"&gt;The Phrase Finder&lt;/a&gt;:&lt;/p&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;"In horse racing circles tips on which horse is a likely winner circulate amongst punters. The most trusted authorities are considered&#xD;
to be those in closest touch with the recent form of the horse, i.e. stable lads, trainers etc. The notional 'from the horse's mouth' is supposed to indicate one step better than even that inner circle, i.e. the horse itself."&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;In their &lt;a href="http://fxexperience.com/2009/06/skinning-architecture-in-javafx/" target="_blank"&gt;latest fxexperience.com blog post&lt;/a&gt;, Richard (Jasper is on holiday) sheds a lot of light on the skinning architecture in JavaFX 1.2 and what is planned for the next release.&lt;/p&gt;&lt;p&gt;Regards,&lt;/p&gt;&lt;p&gt;Jim Weaver&lt;/p&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?a=PmNc0bqDzQM:KIAwDQ7HBGQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?a=PmNc0bqDzQM:KIAwDQ7HBGQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?i=PmNc0bqDzQM:KIAwDQ7HBGQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?a=PmNc0bqDzQM:KIAwDQ7HBGQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?i=PmNc0bqDzQM:KIAwDQ7HBGQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?a=PmNc0bqDzQM:KIAwDQ7HBGQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?i=PmNc0bqDzQM:KIAwDQ7HBGQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JamesWeaversJavafxBlog/~4/PmNc0bqDzQM" height="1" width="1"/&gt;</content>


    <feedburner:origLink>http://learnjavafx.typepad.com/weblog/2009/06/skinning-architecture-in-javafx-straight-from-the-horses-mouth.html</feedburner:origLink></entry>
    <entry>
        <title>Painting with JavaJeff (JavaFX Jeff?)</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JamesWeaversJavafxBlog/~3/pRJYi3FWPa4/painting-with-javajeff-javafx-jeff.html" />
        <link rel="replies" type="text/html" href="http://learnjavafx.typepad.com/weblog/2009/06/painting-with-javajeff-javafx-jeff.html" thr:count="0" />
        <id>tag:typepad.com,2003:post-68149469</id>
        <published>2009-06-16T00:41:24-04:00</published>
        <updated>2009-06-16T00:41:24-04:00</updated>
        <summary>One of the great features of JavaFX is that it can instantiate and call methods of Java classes. Java author "JavaJeff" Friesen has created a Painter/Canvas infrastructure using JavaFX and Java. This infrastructure supports complex/fast painting possibilities such as fireworks, plasma, fractals, and even fire. Check out Jeff's blog post that provides the code, an explanation, and a Web Start...</summary>
        <author>
            <name>Jim Weaver</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="JavaFX - General" />
        <category scheme="http://www.sixapart.com/ns/types#category" term="JavaFX Script Animation" />
        <category scheme="http://www.sixapart.com/ns/types#category" term="JavaFX SDK 1.2" />
        
        
<content type="html" xml:lang="en-US" xml:base="http://learnjavafx.typepad.com/weblog/">&lt;p&gt;One of the great features of JavaFX is that it can instantiate and call methods of Java classes.  Java author "JavaJeff" Friesen has created a Painter/Canvas infrastructure using JavaFX and Java.  This infrastructure supports complex/fast   painting possibilities such as fireworks, plasma, fractals, and even fire.&lt;/p&gt;&lt;p&gt;&lt;a href="http://javajeff.mb.ca/cgi-bin/makepage.cgi?javafx/pc/pc" style="display: inline;" target="_blank"&gt;&lt;img alt="PlasmaPainter" border="0" class="at-xid-6a00e54f133d698834011571181e0f970b " src="http://learnjavafx.typepad.com/.a/6a00e54f133d698834011571181e0f970b-800wi" title="PlasmaPainter"&gt;&lt;/img&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Check out &lt;a href="http://javajeff.mb.ca/cgi-bin/makepage.cgi?javafx/pc/pc" target="_blank"&gt;Jeff's blog post&lt;/a&gt; that provides the code, an explanation, and a Web Start link for the "plasma" painting example shown in the screenshot above.&lt;/p&gt;&lt;p&gt;Regards,&lt;br&gt;Jim Weaver&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;input id="gwProxy" type="hidden"&gt;&lt;/input&gt;&lt;/p&gt;&lt;p&gt;&lt;input id="jsProxy" onclick="jsCall();" type="hidden"&gt;&lt;/input&gt;&lt;/p&gt;&lt;div id="refHTML"&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?a=pRJYi3FWPa4:6wcwFnpf1VA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?a=pRJYi3FWPa4:6wcwFnpf1VA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?i=pRJYi3FWPa4:6wcwFnpf1VA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?a=pRJYi3FWPa4:6wcwFnpf1VA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?i=pRJYi3FWPa4:6wcwFnpf1VA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?a=pRJYi3FWPa4:6wcwFnpf1VA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?i=pRJYi3FWPa4:6wcwFnpf1VA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JamesWeaversJavafxBlog/~4/pRJYi3FWPa4" height="1" width="1"/&gt;</content>


    <feedburner:origLink>http://learnjavafx.typepad.com/weblog/2009/06/painting-with-javajeff-javafx-jeff.html</feedburner:origLink></entry>
    <entry>
        <title>Pro JavaFX Book SDK 1.2 Rewrite Complete</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JamesWeaversJavafxBlog/~3/TopD6tkCjDo/all-pro-javafx-early-access-ebook-chapters-have-been-updated-to-sdk-12.html" />
        <link rel="replies" type="text/html" href="http://learnjavafx.typepad.com/weblog/2009/06/all-pro-javafx-early-access-ebook-chapters-have-been-updated-to-sdk-12.html" thr:count="6" thr:updated="2009-07-10T14:05:21-04:00" />
        <id>tag:typepad.com,2003:post-68060805</id>
        <published>2009-06-13T11:43:27-04:00</published>
        <updated>2009-06-13T16:21:11-04:00</updated>
        <summary>All Pro JavaFX early access eBook chapters have been updated to SDK 1.2. They are being shipped to the printer, so the book composed of atoms vs. bits will be available soon. In addition, we're releasing a 16-page Pro JavaFX 1.2 children's book, shown below (not really). :-) The image shown above was created by Stephen Chin for the slides...</summary>
        <author>
            <name>Jim Weaver</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="Books" />
        <category scheme="http://www.sixapart.com/ns/types#category" term="JavaFX - General" />
        <category scheme="http://www.sixapart.com/ns/types#category" term="JavaFX SDK 1.2" />
        
        
<content type="html" xml:lang="en-US" xml:base="http://learnjavafx.typepad.com/weblog/">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;All &lt;a href="http://apress.com/book/view/1430218754" target="_blank"&gt;Pro JavaFX early access eBook&lt;/a&gt; chapters have been updated to SDK 1.2.  They are being shipped to the printer, so the book composed of atoms vs. bits will be available soon.&lt;/p&gt;&lt;p&gt;In addition, we're releasing a 16-page Pro JavaFX 1.2 children's book, shown below (not really). :-)&lt;/p&gt;&lt;p&gt;&lt;a href="http://apress.com/book/view/1430218754" style="display: inline;" target="_blank"&gt;&lt;/a&gt;&lt;a href="http://apress.com/book/view/1430218754" style="display: inline;" target="_blank"&gt;&lt;img alt="Pro-bunny" border="0" class="at-xid-6a00e54f133d69883401157108c757970b " src="http://learnjavafx.typepad.com/.a/6a00e54f133d69883401157108c757970b-800wi" title="Pro-bunny"&gt;&lt;/img&gt;&lt;/a&gt; &lt;br&gt; &lt;/p&gt;&lt;p&gt;The image shown above was created by Stephen Chin for the &lt;a href="http://developers.sun.com/learning/javaoneonline/sessions/2009/pdf/TS-3789.pdf" target="_blank"&gt;slides in his presentation with Josh Marinacci on WidgetFX&lt;/a&gt; at JavaOne.  The &lt;a href="http://www.nabaztag.com" target="_blank"&gt;Nabaztag bunny&lt;/a&gt; is a robot used in the presentation, but neither rabbits nor robots were harmed in the making of this image or during the presentation :-)  By the way &lt;a href="http://developers.sun.com/learning/javaoneonline/sessions/2009/pdf/TS-4861.pdf" target="_blank"&gt;here&lt;/a&gt; are the slides for the presentation on JavaFX that Stephen and I gave at JavaOne.&lt;/p&gt;&lt;p&gt;If you're interested in what's between the covers of the book, here's a brief description of each chapter:&lt;/p&gt;&lt;ul&gt;&#xD;
&lt;li&gt;Chapter 1, &lt;em&gt;&lt;strong&gt;Getting a Jump Start in JavaFX&lt;/strong&gt;&lt;/em&gt;, gives you a jump start in developing applications in the JavaFX language, brings you up to date on the brief history of JavaFX, and shows you how to get the JavaFX software development kit. It then walks you through the process of compiling and running JavaFX applications, and teaches you a lot about the JavaFX language and API while walking through example application code.&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;Chapter 2, &lt;em&gt;&lt;strong&gt;Taking a Closer Look at the JavaFX Script Language&lt;/strong&gt;&lt;/em&gt;, covers the fundamentals of the JavaFX Script language, including  concepts such as variables, primitive types, literal values, and basic operations.  JavaFX sequences are introduced in this chapter, along with how to access their members and perform sequence comprehension.&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;Chapter 3, &lt;em&gt;&lt;strong&gt;Creating a User Interface in JavaFX&lt;/strong&gt;&lt;/em&gt;, associates the metaphor of creating a theatre play with JavaFX development, and discusses creating a stage, a scene, nodes, a model, event handlers, and animating some of the nodes.  It then delves into each of these concepts using JavaFX examples, finishing up with a Pong-like game that demonstrates how to detect when nodes in the scene have collided.&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;Chapter 4, &lt;em&gt;&lt;strong&gt;Using Functions, Classes, and Other Advanced Features&lt;/strong&gt;&lt;/em&gt;, discusses how to define functions and classes of your own. It then covers function signatures and function types, and how to write anonymous functions.  From there, this chapter introduces how to define class hierarchies, and the covers the details about class types. It also discusses what happens when an object is instantiated and how you can exert control over the process.&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;Chapter 5, &lt;em&gt;&lt;strong&gt;Creating Custom UI Components and Charts in JavaFX&lt;/strong&gt;&lt;/em&gt;, explains how to define custom UI components of two fundamentally different types -- custom nodes, and UI controls.  After showing you how to create custom nodes in the context of creating a couple of color selection components, it covers how to create UI controls in the context of a stoplight control that has multiple skins.  The chapter finishes by teaching you how to use the charting controls to simply and easily create charts in JavaFX.&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;Chapter 6, &lt;em&gt;&lt;strong&gt;Using the Media Classes&lt;/strong&gt;&lt;/em&gt;, explores the capabilities of the JavaFX media classes that make it easy for developers to incorporate playback support for most of the popular formats.   This chapter demostrates how simple it is to include basic media playback support in your JavaFX applications and then show you how to build more sophisticated playback applications.&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;Chapter 7, &lt;em&gt;&lt;strong&gt;Dynamically Laying Out Nodes in the User Interface&lt;/strong&gt;&lt;/em&gt;, shows how you can leverage the dynamic layouts mechanisms of JavaFX to build complicated user interfaces with zero static positioning.  These mechanisms include the bind statement, powerful custom layouts built on top of the Panel and Container classes, and the built-in layouts including HBox, VBox, Flow, Tile, and Stack.&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;Chapter 8, &lt;em&gt;&lt;strong&gt;Extending JavaFX with Third-Party Libraries&lt;/strong&gt;&lt;/em&gt;, introduces several of the JavaFX third-party extensions that simplify the development of applications.   All of the third-party extensions introduced in this chapter are available as free or open source libraries. This ensures that anyone can make use of these libraries, and also guarantees that you will not be locked into a specific vendor.&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;Chapter 9, &lt;em&gt;&lt;strong&gt;Building a Professional JavaFX Application&lt;/strong&gt;&lt;/em&gt;, shows you some of the professional techniques we use to write real-world JavaFX applications. You will need them when working with a graphic designer, and you will find them useful when you are confronted with the memory usage and performance trade-offs that developers need to consider for real applications. This chapter also provides tips and techniques for enhancing the user’s experience.&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;Chapter 10, &lt;em&gt;&lt;strong&gt;Developing JavaFX Mobile Applications&lt;/strong&gt;&lt;/em&gt;, teaches you the basics of JavaFX Mobile development, which will enable you to write portable applications that work on both desktop and mobile devices.  During this chapter you’ll gain an understanding of the Common Profile, learn how to take advantage of the Java ME capabilities beneath JavaFX Mobile, and adopt JavaFX Mobile best practices that will enable you to write high-performance applications.&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;The &lt;strong&gt;&lt;em&gt;Appendix&lt;/em&gt;&lt;/strong&gt; presents the keywords and the operators of JavaFX Script.  Precedence and associativity rules are supplied for the operators.&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;Regards, and enjoy the book!&lt;/p&gt;&lt;p&gt;Jim Weaver&lt;br&gt;&lt;input id="gwProxy" type="hidden"&gt;&lt;/input&gt;&lt;input id="jsProxy" onclick="jsCall();" type="hidden"&gt;&lt;/input&gt;&lt;/p&gt;&lt;div id="refHTML"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?a=TopD6tkCjDo:yeUOvnb3Ljw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?a=TopD6tkCjDo:yeUOvnb3Ljw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?i=TopD6tkCjDo:yeUOvnb3Ljw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?a=TopD6tkCjDo:yeUOvnb3Ljw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?i=TopD6tkCjDo:yeUOvnb3Ljw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?a=TopD6tkCjDo:yeUOvnb3Ljw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?i=TopD6tkCjDo:yeUOvnb3Ljw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JamesWeaversJavafxBlog/~4/TopD6tkCjDo" height="1" width="1"/&gt;</content>


    <feedburner:origLink>http://learnjavafx.typepad.com/weblog/2009/06/all-pro-javafx-early-access-ebook-chapters-have-been-updated-to-sdk-12.html</feedburner:origLink></entry>
    <entry>
        <title>JavaFX Authoring Tool Demo at JavaOne</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JamesWeaversJavafxBlog/~3/XSD6KZivp2o/javafx-authoring-tool-demo-at-javaone.html" />
        <link rel="replies" type="text/html" href="http://learnjavafx.typepad.com/weblog/2009/06/javafx-authoring-tool-demo-at-javaone.html" thr:count="2" thr:updated="2009-06-12T13:50:48-04:00" />
        <id>tag:typepad.com,2003:post-67937821</id>
        <published>2009-06-12T08:36:53-04:00</published>
        <updated>2009-06-16T00:51:34-04:00</updated>
        <summary>At JavaOne 2009 during James Gosling's Toy Show, Tor Norbye demonstrated the current state of the long-awaited JavaFX Authoring Tool. Some of the demonstrated features were: The ability to position/orient a node (e.g. an image) in multiple places on the stage, each corresponding with a point in time on a timeline (represented by a slider). Each point in time becomes...</summary>
        <author>
            <name>Jim Weaver</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="Compiled JavaFX Script Tools" />
        <category scheme="http://www.sixapart.com/ns/types#category" term="JavaFX - General" />
        
        
<content type="html" xml:lang="en-US" xml:base="http://learnjavafx.typepad.com/weblog/">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;At JavaOne 2009 during James Gosling's Toy Show, Tor Norbye demonstrated the current state of the long-awaited JavaFX Authoring Tool.  &lt;/p&gt;&lt;p&gt;&lt;a href="http://sellmic.com/blog/2009/06/05/javafx-authoring-tool-demo-at-javaone-2009-with-video/" style="display: inline;" target="_blank"&gt;&lt;img alt="JavaFXAuthoringTool" border="0" class="at-xid-6a00e54f133d698834011570fc1110970b " src="http://learnjavafx.typepad.com/.a/6a00e54f133d698834011570fc1110970b-800wi" title="JavaFXAuthoringTool"&gt;&lt;/img&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Some of the demonstrated features were:&lt;/p&gt;&lt;ul&gt;&#xD;
&lt;li&gt;The ability to position/orient a node (e.g. an image) in multiple places on the stage, each corresponding with a point in time on a timeline (represented by a slider).  Each point in time becomes a KeyFrame, and interpolations are calculated based upon position/orientation.  Dragging the slider results in seeing the node move and rotate through the positions in which the node was placed.  I assume that scaling and other transforms will be supported in the tool as well.  Tor mentioned that various interpolations are supported (LINEAR, EASEIN, EASEOUT, and EASEBOTH).  I assume that spline interpolation will be supported as well.&lt;/li&gt;&#xD;
&lt;li&gt;Placing UI controls on the stage, hooking them up with event handlers, as well as binding to instance variable values (e.g. in other UI controls).&lt;/li&gt;&#xD;
&lt;li&gt;Targeting an application at multiple screens (e.g. desktop, mobile phones), with the ability to customize for each screen.&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;Augusto Sellhorn (AKA sellmic) has compiled some &lt;a href="http://sellmic.com/blog/2009/06/05/javafx-authoring-tool-demo-at-javaone-2009-with-video/" target="_blank"&gt;video clips and his thoughts about the JavaFX Authoring Tool&lt;/a&gt; in a blog post.  If you didn't see the Toy Show, checking out Augusto's post is a quick way of seeing the preview of the tool.&lt;/p&gt;&lt;p&gt;Update June 13, 2009: Augusto created &lt;a href="http://sellmic.com/blog/2009/06/13/new-screenshots-of-the-javafx-design-tool/" target="_blank"&gt;another blog post&lt;/a&gt; with new screenshots, links and thoughts on the JavaFX Authoring Tool.&lt;/p&gt;&#xD;
&#xD;
&#xD;
&lt;script type="text/javascript"&gt;var dzone_url = 'http://learnjavafx.typepad.com/weblog/2009/06/javafx-authoring-tool-demo-at-javaone.html';&lt;/script&gt;&#xD;
&lt;script type="text/javascript"&gt;var dzone_title = 'JavaFX Authoring Tool Demo at JavaOne';&lt;/script&gt;&#xD;
&lt;script type="text/javascript"&gt;var dzone_blurb = '[blurb]';&lt;/script&gt;&#xD;
&lt;script type="text/javascript"&gt;var dzone_style = '2';&lt;/script&gt;&#xD;
&lt;script src="http://widgets.dzone.com/widgets/zoneit.js"&gt;&lt;/script&gt;&#xD;
&#xD;
&#xD;
&lt;p&gt;Regards,&lt;/p&gt;&lt;p&gt;Jim Weaver&lt;/p&gt;&lt;p&gt;&lt;input id="gwProxy" type="hidden"&gt;&lt;/input&gt;&lt;/p&gt;&lt;p&gt;&lt;input id="jsProxy" onclick="jsCall();" type="hidden"&gt;&lt;/input&gt;&lt;/p&gt;&lt;div id="refHTML"&gt;&lt;/div&gt;&lt;p&gt;&lt;input id="gwProxy" type="hidden"&gt;&lt;/input&gt;&lt;input id="jsProxy" onclick="jsCall();" type="hidden"&gt;&lt;/input&gt;&lt;/p&gt;&lt;div id="refHTML"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?a=XSD6KZivp2o:pw-FFtXKy00:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?a=XSD6KZivp2o:pw-FFtXKy00:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?i=XSD6KZivp2o:pw-FFtXKy00:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?a=XSD6KZivp2o:pw-FFtXKy00:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?i=XSD6KZivp2o:pw-FFtXKy00:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?a=XSD6KZivp2o:pw-FFtXKy00:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JamesWeaversJavafxBlog?i=XSD6KZivp2o:pw-FFtXKy00:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JamesWeaversJavafxBlog/~4/XSD6KZivp2o" height="1" width="1"/&gt;</content>


    <feedburner:origLink>http://learnjavafx.typepad.com/weblog/2009/06/javafx-authoring-tool-demo-at-javaone.html</feedburner:origLink></entry>
 
</feed><!-- ph=1 --><!-- nhm:dynamic-ssi -->
