<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3370527929433173283</id><updated>2012-01-17T21:13:19.953+01:00</updated><category term='linux'/><category term='javafx'/><category term='zoom'/><category term='top1000'/><category term='virtualbox'/><category term='linechart'/><category term='radio'/><category term='veronica'/><category term='golf'/><category term='spring'/><category term='maven'/><category term='music'/><category term='network'/><category term='ubuntu'/><category term='wine'/><category term='ubuntu 9.10'/><title type='text'>more than a feeling</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://andre86blog.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3370527929433173283/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://andre86blog.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Andre Hogenkamp</name><uri>http://www.blogger.com/profile/10425828227626608950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>13</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3370527929433173283.post-7579803993617109122</id><published>2011-12-07T09:12:00.001+01:00</published><updated>2011-12-07T09:17:03.822+01:00</updated><title type='text'>Colored plane shadow</title><content type='html'>Just found this &lt;a href="http://maps.google.com/?ll=50.608235,6.447718&amp;amp;z=18"&gt;weird plane shadow&lt;/a&gt; when browsing on google maps:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-dm_XVWVTVG8/Tt8gkdw1rXI/AAAAAAAABeQ/puzkehfalzE/s1600/planeshadow.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="273" src="http://2.bp.blogspot.com/-dm_XVWVTVG8/Tt8gkdw1rXI/AAAAAAAABeQ/puzkehfalzE/s320/planeshadow.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3370527929433173283-7579803993617109122?l=andre86blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3370527929433173283/posts/default/7579803993617109122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3370527929433173283/posts/default/7579803993617109122'/><link rel='alternate' type='text/html' href='http://andre86blog.blogspot.com/2011/12/colored-plane-shadow.html' title='Colored plane shadow'/><author><name>Andre Hogenkamp</name><uri>http://www.blogger.com/profile/10425828227626608950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-dm_XVWVTVG8/Tt8gkdw1rXI/AAAAAAAABeQ/puzkehfalzE/s72-c/planeshadow.JPG' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3370527929433173283.post-4721795103628062037</id><published>2011-11-16T15:38:00.001+01:00</published><updated>2011-11-16T20:56:03.290+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='javafx'/><category scheme='http://www.blogger.com/atom/ns#' term='wine'/><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Running JavaFX on Linux (2)</title><content type='html'>After succeeding to run a very simple javafx app on linux, the next thing to try was a more complex app. Since there is a nice blog on&amp;nbsp;&lt;a href="http://www.zenjava.com/2011/11/03/client-server-with-javafx-2-and-hessian-guice-fxml/"&gt;client server with javafx&lt;/a&gt;&amp;nbsp;it looked like a good project.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Server&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The server side was simple since that did not involve anything different. The client side is the interesting part.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&amp;lt;fx:resources id="appRes" description="runtime classpath"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&amp;lt;fileset dir="dist" includes="*.jar"/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&amp;lt;/fx:resources&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Client&lt;/b&gt;&lt;br /&gt;The big difference with the previous post is that now there are javafx external classes used, so more jars on the classpath. After placing all the extra jars on the classpath with&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&amp;lt;fx:resources id="appRes" description="runtime classpath"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&amp;lt;fileset dir="dist" includes="*.jar"/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&amp;lt;fileset dir="${javafx-runtime}/lib" includes="*.jar"/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&amp;lt;fileset dir="${javafx-runtime}/bin" includes="*.dll"/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&amp;lt;/fx:resources&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;the first problem encountered was that the javafx classes and dll's were not found anymore. Turns out this is standard jar stuff, when using the manifest CLASS_PATH entry, all other classpath entries are ignored. Apparently also when using the 'JavaFX-Class-Path' entry. To fix it was not a big problem&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&amp;lt;fx:resources id="appRes" description="runtime classpath"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&amp;nbsp;&amp;lt;fileset dir="dist" includes="*.jar"/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&amp;nbsp;&amp;lt;fileset dir="${javafx-runtime}/lib" includes="*.jar"/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&amp;nbsp;&amp;lt;fileset dir="${javafx-runtime}/bin" includes="*.dll"/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&amp;lt;/fx:resources&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;It works:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-92pCzlUJKMs/TsPP_HmwosI/AAAAAAAABd8/FXY9AvJJogU/s1600/ClientServerHello.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="268" src="http://1.bp.blogspot.com/-92pCzlUJKMs/TsPP_HmwosI/AAAAAAAABd8/FXY9AvJJogU/s320/ClientServerHello.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;but it should be run from the 'dist' directory and all the dll's and jars from the javafx runtime classpath were in the manifest classpath&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;JavaFX-Class-Path: aopalliance-1.0.jar clientservercommon-1.0.0-SNAPSH&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&amp;nbsp;OT.jar deploy.jar guice-3.0.jar hessian-2.1.12.jar javafx-runtime-2.0&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&amp;nbsp;.jar javafxclient.jar javaws.jar javax.inject-1.jar jfxrt.jar plugin.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&amp;nbsp;jar deploy.jar javaws.jar jfxrt.jar plugin.jar WebPaneJava.dll axbrid&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&amp;nbsp;ge.dll decora-d3d.dll decora-sse.dll deploy.dll eula.dll fxmp3plugin.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&amp;nbsp;dll fxplugins.dll glib-lite.dll gstreamer-lite.dll javafx-font.dll ja&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&amp;nbsp;vafx-iio.dll jfxmedia.dll jp2iexp.dll jp2native.dll jp2ssv.dll jpicom&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&amp;nbsp;.dll jpiexp.dll jpinscp.dll jpioji.dll jpishare.dll libxml2.dll mat.d&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&amp;nbsp;ll msvcr100.dll npjpi170_01.dll npoji610.dll prism-d3d.dll ssv.dll ws&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&amp;nbsp;detect.dll&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;and copied to the 'dist' directory as well! That's not a good solution.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Improving&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;So first remove the javafx runtime files from the resources and place them somewhere else, but where ?&lt;br /&gt;Since the javafx runtime files are accesed from the windows executable 'java' the best solution is to put the&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;'/home/andre/.wine/drive_c/Program Files/Oracle/JavaFX Runtime 2.0/bin'&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;dir in the windows path environment variable. Run 'wine regedit' and then go to&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;'HKEY_CURRENT_USER/Environment'.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Make a new String value 'Path' and add a value&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;'c:\\windows;c:\\windows\\system;c:\\Program Files\\Oracle\\JavaFX Runtime 2.0\\bin'&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-0_ZDMgRKVZk/TsQL5aomQbI/AAAAAAAABeE/6U14qq3AK8c/s1600/RegEditPath.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-0_ZDMgRKVZk/TsQL5aomQbI/AAAAAAAABeE/6U14qq3AK8c/s1600/RegEditPath.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;According to wine user guide set environment-variables, the windows and system directory should be added. After that it still worked but the classpath was a lot slimmer&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;JavaFX-Class-Path: aopalliance-1.0.jar clientservercommon-1.0.0-SNAPSH&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&amp;nbsp;OT.jar guice-3.0.jar hessian-2.1.12.jar javafx-runtime-2.0.jar javax.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&amp;nbsp;inject-1.jar&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;and the 'dist' directory a lot smaller.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;andre@ubuntu:~/Programming/workspaces/javafx/javafxclient/dist$ ls&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;aopalliance-1.0.jar &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;javafxclient.jar&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;clientservercommon-1.0.0-SNAPSHOT.jar &amp;nbsp;javafxclient.jnlp&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;guice-3.0.jar &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;javafx-runtime-2.0.jar&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;hessian-2.1.12.jar &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; javax.inject-1.jar&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;javafxclient.html&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Another improvement and to make it more reusable is that the hardcoded values in build.xml are replaced with variables. They can be either maven properties (like project.name) or self defined properties (main.class and javafx-sdk-path). Both can be used without adding anything in the ant build&lt;br /&gt;file.&lt;br /&gt;&lt;br /&gt;The zip with the projects can be found in my&lt;a href="https://docs.google.com/open?id=0B-24Z_hfVZYOMmY0MmIxNGQtZmQ2Yi00NTUzLWIyY2ItYWEzMjk5ZjIyMTY5"&gt; gmail docs&lt;/a&gt;.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3370527929433173283-4721795103628062037?l=andre86blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3370527929433173283/posts/default/4721795103628062037'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3370527929433173283/posts/default/4721795103628062037'/><link rel='alternate' type='text/html' href='http://andre86blog.blogspot.com/2011/11/running-javafx-on-linux-2.html' title='Running JavaFX on Linux (2)'/><author><name>Andre Hogenkamp</name><uri>http://www.blogger.com/profile/10425828227626608950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-92pCzlUJKMs/TsPP_HmwosI/AAAAAAAABd8/FXY9AvJJogU/s72-c/ClientServerHello.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3370527929433173283.post-3521823021289517369</id><published>2011-11-05T15:59:00.002+01:00</published><updated>2011-11-05T16:34:36.636+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='javafx'/><category scheme='http://www.blogger.com/atom/ns#' term='wine'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Running JavaFx on Linux</title><content type='html'>Developing JavaFX program on Linux is OK, but the ultimate test is to run JavaFX on Linux. Since there is no release for Linux there is some tinkering to do. After installing the &lt;a href="http://andre86blog.blogspot.com/2011/10/development-with-javafx-on-linux.html"&gt;windows sdk and jre 7&lt;/a&gt; on wine, maven needs to build a jar that can be run on wine.&amp;nbsp;In the wine configuration java.exe was added and Windows 7 was chosen as windows version. It does not work with XP.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-iHzqft_0RS8/TrVTHAg3tQI/AAAAAAAABds/dhECOtnbl4s/s1600/wine-config-applications.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-iHzqft_0RS8/TrVTHAg3tQI/AAAAAAAABds/dhECOtnbl4s/s320/wine-config-applications.png" width="276" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;For packaging the jar, the&lt;a href="http://download.oracle.com/javafx/2.0/deployment/javafx_ant_task_reference.htm#CIACDJHC"&gt; Java FX ant task&lt;/a&gt; is used. This will make a jar which will run a com.javafx.main.Main class, which will run our javafx class.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&amp;lt;project name="JavaFXSample" default="default" basedir="."&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;xmlns:fx="javafx:com.sun.javafx.tools.ant"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;target name="default"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;taskdef resource="com/sun/javafx/tools/ant/antlib.xml" &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; uri="javafx:com.sun.javafx.tools.ant"&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; classpath="${javafx_sdk_path}/tools/ant-javafx.jar"/&amp;gt; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;&amp;lt;fx:application id="app"&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;name="${projectname}"&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mainClass="${main.class}"/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&amp;lt;fx:resources id="appRes"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;&amp;lt;fx:fileset dir="dist" includes="onlinux.jar"/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&amp;lt;/fx:resources&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&amp;lt;fx:jar destfile="dist/${projectname}.jar"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;&amp;lt;!-- Define what to launch --&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp;&amp;lt;fx:application refid="app"/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;&amp;lt;!-- Define what classpath to use --&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;&amp;lt;fx:resources refid="appRes"/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;&amp;lt;!-- Define what files to include --&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;&amp;lt;fileset dir="${build.dir}"/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;&amp;lt;/fx:jar&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;&amp;lt;fx:deploy width="800" height="600"&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;outdir="dist"&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;outfile="${projectname}"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp;&amp;lt;fx:info title="JavaFX on Linux"/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp;&amp;lt;fx:application refid="app"/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;&amp;lt;fx:resources refid="appRes"/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;&amp;lt;/fx:deploy&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/target&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&amp;lt;/project&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To run this use the maven ant-run plugin, add this to the plugins tag&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;lt;plugin&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;artifactId&amp;gt;maven-antrun-plugin&amp;lt;/artifactId&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;version&amp;gt;1.6&amp;lt;/version&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;executions&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;execution&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;id&amp;gt;compile&amp;lt;/id&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;phase&amp;gt;compile&amp;lt;/phase&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;configuration&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;target&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="color: #38761d; white-space: pre;"&gt;  &lt;/span&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;property name="javafx_sdk_path" value="${jfx-sdk-path}"/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;property name="build.dir" value="${project.build.outputDirectory}"/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;property name="projectname" value="${project.name}"/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;property name="main.class" value="${main-class}"/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;ant antfile="${basedir}/build.xml"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;target name="default"/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/ant&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/target&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/configuration&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;goals&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;goal&amp;gt;run&amp;lt;/goal&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/goals&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/execution&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/executions&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp;&amp;lt;/plugin&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There are some properties used to transfer values to the build.xml.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;In the dist folder there is now a jar with the name of our project. There are also a html page and a jnlp generated, but they won't run on linux because there is no JavaFX and no plugin for the browsers. They do function on windows.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The final step is to use the java.exe from wine and add the javafx runtime libraries and dll's to the classpath. To separate the specific linux stuff from the application classpath, it is setup in the command line. Change the working directory to that of the application (where the maven pom is) and type&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;wine '/home/andre/.wine/drive_c/Program Files/Java/jre7/bin/java.exe' -cp '/home/andre/.wine/drive_c/Program Files/Oracle/JavaFX Runtime 2.0/bin;/home/andre/.wine/drive_c/Program Files/Oracle/JavaFX Runtime 2.0/lib/jfxrt.jar' -jar dist/onlinux.jar&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;That's it! JavaFX running on a linux box with a little help.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-hKIQ4KRDrhM/TrVOvd2Mu6I/AAAAAAAABdc/v7lAt8DKv28/s1600/JavaFxOnLinux.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="251" src="http://1.bp.blogspot.com/-hKIQ4KRDrhM/TrVOvd2Mu6I/AAAAAAAABdc/v7lAt8DKv28/s320/JavaFxOnLinux.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To test more JavaFx on linux the Ensemble app from the javafx samples was run. It does run, albeit not at top speed and the 3D samples do not work at all.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-VVwH6mfN1JI/TrVPSK-_FuI/AAAAAAAABdk/tRhmF9LtUCo/s1600/EnsembleOnLinux.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="180" src="http://3.bp.blogspot.com/-VVwH6mfN1JI/TrVPSK-_FuI/AAAAAAAABdk/tRhmF9LtUCo/s320/EnsembleOnLinux.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;The complete project can be found &lt;a href="https://docs.google.com/open?id=0B-24Z_hfVZYOYjg3YTZhNTMtZjhmMC00ZDhmLWI5MjEtYzQ3NjZiYTI3MTBm"&gt;here&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3370527929433173283-3521823021289517369?l=andre86blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3370527929433173283/posts/default/3521823021289517369'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3370527929433173283/posts/default/3521823021289517369'/><link rel='alternate' type='text/html' href='http://andre86blog.blogspot.com/2011/11/running-javafx-on-linux.html' title='Running JavaFx on Linux'/><author><name>Andre Hogenkamp</name><uri>http://www.blogger.com/profile/10425828227626608950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-iHzqft_0RS8/TrVTHAg3tQI/AAAAAAAABds/dhECOtnbl4s/s72-c/wine-config-applications.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3370527929433173283.post-8253483709355572450</id><published>2011-10-27T23:05:00.001+02:00</published><updated>2011-11-05T16:19:46.501+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='javafx'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Development with JavaFX on Linux</title><content type='html'>Since JavaFx 2.0 was introduced I was developing applications on Windows, but since my main machine is an Ubuntu box, I wanted to at least develop JavaFX&amp;nbsp;applications on Linux. This is a summary of how to achieve that on Ubuntu 11.04&lt;br /&gt;&lt;br /&gt;While the linux version of JavaFX is not available, the best option seemed wine (&lt;a href="http://www.winehq.org/"&gt;http://www.winehq.org/&lt;/a&gt;). It is available in Ubuntu Software Center.&lt;br /&gt;&lt;br /&gt;Installing JavaFX one wine requires a java runtime, so first install that, I choose jre 7. There is no need for a jdk, because the one on Linux is used later on. Download the windows exe (i have chosen the 32 bit/i586 version) and choose Open with &amp;nbsp; .. Wine Windows Program Loader&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-r-LbR-2k0fA/TqnD48zTjhI/AAAAAAAABdU/Pc824DLJThg/s1600/OpenWithWine.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-r-LbR-2k0fA/TqnD48zTjhI/AAAAAAAABdU/Pc824DLJThg/s320/OpenWithWine.png" width="309" /&gt;&lt;/a&gt;&lt;/div&gt;It will install normally (well like on windows ;-). After installing the jre, the JavaFX sdk needs the same treatment (i also choose the 32bit/i586 version). It will be installed on the wine C: drive if you accept the default values.&lt;br /&gt;&lt;br /&gt;If you have not installed a jdk on linux do so now. You need at least 1.6, it also works with version 7.&lt;br /&gt;&lt;br /&gt;Using the &amp;nbsp;JavaFX sdk in Eclipse is the next step. Since I use maven to develop, maven 3 was first setup. Then the javafx runtime jar was installed in the maven repository with&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;mvn install:install-file -Dfile="/home/andre/.wine/drive_c/Program Files/Oracle/JavaFX 2.0 SDK/rt/lib/jfxrt.jar" -DgroupId=com.oracle -DartifactId=javafx-runtime -Dversion=2.0 -Dpackaging=jar&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After that it is possible to compile JavaFX 2.0 program under linux with maven. Since I use eclipse as IDE a&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;mvn eclipse:eclipse&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;was enough to compile in eclipse.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I know just copying the jfxrt.jar from a windows install and using that would have been enough to get this far, but this way it can be done without access to a windows machine and the next challenge is to run JavaFX&amp;nbsp;applications&amp;nbsp;in wine.&amp;nbsp;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3370527929433173283-8253483709355572450?l=andre86blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3370527929433173283/posts/default/8253483709355572450'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3370527929433173283/posts/default/8253483709355572450'/><link rel='alternate' type='text/html' href='http://andre86blog.blogspot.com/2011/10/development-with-javafx-on-linux.html' title='Development with JavaFX on Linux'/><author><name>Andre Hogenkamp</name><uri>http://www.blogger.com/profile/10425828227626608950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-r-LbR-2k0fA/TqnD48zTjhI/AAAAAAAABdU/Pc824DLJThg/s72-c/OpenWithWine.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3370527929433173283.post-4912913237211175403</id><published>2011-02-08T21:25:00.016+01:00</published><updated>2011-02-08T22:30:35.257+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linechart'/><category scheme='http://www.blogger.com/atom/ns#' term='zoom'/><category scheme='http://www.blogger.com/atom/ns#' term='javafx'/><title type='text'>JavaFX zoomable LineChart</title><content type='html'>JavFX has a lot of nice graphical components, one of them is the javafx.scene.chart.LineChart. But the LineChart has only basic functions and one thing that was missing was a sort of zoom function. That would be able to show a part of the original graph shown. &lt;br /&gt;&lt;br /&gt;Since it should both be a CustomNode and a Container i looked for code that could execute both functions. Luckily Jim Weaver already showed how that was &lt;a href="http://learnjavafx.typepad.com/weblog/2010/05/a-javafx-13-custom-layout-example.html"&gt;possible&lt;/a&gt;. Extending the Container looked simpler, but in the end it was more complex for me, so I ended up using the Panel example.&lt;br /&gt;&lt;br /&gt;In the beginning when data en display code were in the same class, the resizing did not work within a VBox, so I created a Panel as Container class there too. Later on, when separating data and display code (which off course it should be) it automagically started working inside a VBox too, so it was even more the better solution.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_JkqrGS_uG98/TVGt0wBWKzI/AAAAAAAABPo/X4k32EDn-z0/s1600/Screenshot-Transactions.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 297px;" src="http://1.bp.blogspot.com/_JkqrGS_uG98/TVGt0wBWKzI/AAAAAAAABPo/X4k32EDn-z0/s400/Screenshot-Transactions.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5571425335789366066" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The data is just random around 1000, so it does not really look like a chart, but it does show the intention.&lt;br /&gt;&lt;br /&gt;The zooming in and out of the LineChart data was not that easy. Also because I wanted the tickLabels to adjust automatically, but again separating it nicely made the difference.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_JkqrGS_uG98/TVGuIp4ZtmI/AAAAAAAABPw/_nF64ZjCWag/s1600/Screenshot-Transactions-Zoom.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 297px;" src="http://3.bp.blogspot.com/_JkqrGS_uG98/TVGuIp4ZtmI/AAAAAAAABPw/_nF64ZjCWag/s400/Screenshot-Transactions-Zoom.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5571425677738620514" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Another thing I wanted, that ws not obvious is that there should be not too many and not too few labels on the yAxis and the values should be multiples of nice rounded numbers. These calculations are done in a separate java class, ChartUtil.&lt;br /&gt;&lt;br /&gt;Sliders are used at the moment to set the lower and upperbound for the xAxis.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;There are still some things to do.&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;It only works for one series. It would be nice to be able to display more series and have the yValues automaticllay correct for both series.&lt;br /&gt;&lt;br /&gt;The sliders are not really nice, a better way would be to show a mini version of the original chart and set the lower and upper bound from there. The same way that &lt;a href="http://www.google.com/finance?q=AMS:RDSA"&gt;google finance&lt;/a&gt; does it.&lt;br /&gt;&lt;br /&gt;Updating the LineChart to show the zoomed in graph is now done by removing the first entry of the data and adding it again. Not very nice, but I could not find another way to update the LineChart.&lt;br /&gt;&lt;br /&gt;Since financial charts also have a absolute value, it should also be possible to set the lower or upper bound as a fixed number (e.g. zero) or make it have a maximum/minimum.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;The code&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;code class="java"&gt;&lt;br /&gt;package nl.tikal.finance.saldo.chart;&lt;br /&gt;&lt;br /&gt;import javafx.scene.CustomNode;&lt;br /&gt;import javafx.scene.Node;&lt;br /&gt;import javafx.scene.paint.Color;&lt;br /&gt;import javafx.scene.layout.LayoutInfo;&lt;br /&gt;import javafx.scene.chart.LineChart;&lt;br /&gt;import javafx.scene.chart.part.NumberAxis;&lt;br /&gt;import javafx.scene.layout.Resizable;&lt;br /&gt;import javafx.geometry.BoundingBox;&lt;br /&gt;import javafx.scene.layout.LayoutInfoBase;&lt;br /&gt;import javafx.scene.layout.Priority;&lt;br /&gt;import javafx.scene.control.Slider;&lt;br /&gt;import javafx.scene.layout.Container.*;&lt;br /&gt;import javafx.scene.layout.Panel;&lt;br /&gt;import java.util.Date;&lt;br /&gt;import nl.tikal.finance.transaction.util.ChartUtil;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * @author André Hogenkamp&lt;br /&gt; *&lt;br /&gt; */&lt;br /&gt;public class ZoomableLineChart extends CustomNode, Resizable {&lt;br /&gt;    public var title:String;&lt;br /&gt;    public var xAxis:NumberAxis;&lt;br /&gt;    public var yAxis:NumberAxis;&lt;br /&gt;    public var xAxisLabel:String;&lt;br /&gt;    public var yAxisLabel:String;&lt;br /&gt;    public var lowerboundFixed:Number;&lt;br /&gt;    public var formatTickLabel:function (val:Float):String;&lt;br /&gt;&lt;br /&gt;// LineChart stuff&lt;br /&gt;    // variable that holds the dates of the transactiondata.&lt;br /&gt;    var dates:Date[];&lt;br /&gt;    var tickUnit = bind (endSliderValue - beginSliderValue)/10;&lt;br /&gt;    // variable that makes tickunits dependent on difference between upperbound and lowerbound.&lt;br /&gt;    var yAxisTickUnit = 1;&lt;br /&gt;    var lowerbound = 0.0; //lowest value of data&lt;br /&gt;    var upperbound = 0.0; //highest value of data.&lt;br /&gt;&lt;br /&gt;    var dataSubset:LineChart.Data[];&lt;br /&gt;    public var data:LineChart.Series[] on replace {&lt;br /&gt;            dataSubset = data[0].data[0 ..  data[0].data.size()];&lt;br /&gt;        };&lt;br /&gt;&lt;br /&gt;    var beginSliderValue:Number = 0 on replace {&lt;br /&gt;        if (beginSliderValue &gt; endSlider.value) {endSlider.value} else {beginSlider.value}&lt;br /&gt;        dataSubset = data[0].data[beginSliderValue.intValue() ..  endSliderValue.intValue()];&lt;br /&gt;        calculateBounds(dataSubset);&lt;br /&gt;        // hack to redraw LineChart.&lt;br /&gt;        var seriesData:LineChart.Data = dataSubset[0];&lt;br /&gt;        delete dataSubset[0];&lt;br /&gt;        insert seriesData before dataSubset[0];&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    var endSliderValue:Number = data[0].data.size() on replace {&lt;br /&gt;        if (endSliderValue &lt; beginSlider.value) {beginSlider.value} else {endSlider.value}&lt;br /&gt;        dataSubset = data[0].data[beginSliderValue.intValue() ..  endSliderValue.intValue()];&lt;br /&gt;        calculateBounds(dataSubset);&lt;br /&gt;        // hack to redraw LineChart.&lt;br /&gt;        var seriesData:LineChart.Data = dataSubset[0];&lt;br /&gt;        delete dataSubset[0];&lt;br /&gt;        insert seriesData before dataSubset[0];&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    // recalculate tickUnit for y-axis and upperbound and lowerbound for selected subset.&lt;br /&gt;    function calculateBounds(dataSubset : LineChart.Data[]):Void {&lt;br /&gt;        upperbound = Number.NEGATIVE_INFINITY;&lt;br /&gt;        lowerbound = Number.POSITIVE_INFINITY;&lt;br /&gt;        for (dataItem:LineChart.Data in dataSubset) {&lt;br /&gt;            if (dataItem.yValue &lt; lowerbound) {&lt;br /&gt;                lowerbound = dataItem.yValue;&lt;br /&gt;            }&lt;br /&gt;            if (dataItem.yValue &gt; upperbound) {&lt;br /&gt;                upperbound = dataItem.yValue;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        yAxisTickUnit = ChartUtil.calculateFloorPowerOfTen(upperbound.intValue() - lowerbound.intValue());&lt;br /&gt;        upperbound = ChartUtil.calculateUpperbound(upperbound, yAxisTickUnit);&lt;br /&gt;        lowerbound = ChartUtil.calculateLowerbound(lowerbound, yAxisTickUnit);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    var lineChart = LineChart {&lt;br /&gt;        id: "lineChart"&lt;br /&gt;        title: title&lt;br /&gt;        showSymbols: false;&lt;br /&gt;        plotBackgroundFill: Color.AQUA&lt;br /&gt;        xAxis: NumberAxis {&lt;br /&gt;            tickUnit: bind tickUnit&lt;br /&gt;            lowerBound: bind beginSliderValue&lt;br /&gt;            upperBound: bind endSliderValue&lt;br /&gt;            label: xAxisLabel&lt;br /&gt;            formatTickLabel: formatTickLabel&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        yAxis: NumberAxis {&lt;br /&gt;            tickUnit: bind yAxisTickUnit&lt;br /&gt;            lowerBound: bind lowerbound&lt;br /&gt;            upperBound: bind upperbound&lt;br /&gt;            label: yAxisLabel&lt;br /&gt;        }&lt;br /&gt;        data: [&lt;br /&gt;//            for (i in [0 .. data.size() -1]) {&lt;br /&gt;                LineChart.Series {&lt;br /&gt;                    name: bind data[0].name&lt;br /&gt;                    fill: bind data[0].fill&lt;br /&gt;                    data: bind dataSubset&lt;br /&gt;                }&lt;br /&gt;//            }&lt;br /&gt;        ]&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    var beginSlider = Slider {&lt;br /&gt;        id: "beginSlider"&lt;br /&gt;        blockIncrement: 10.0&lt;br /&gt;        majorTickUnit: 50&lt;br /&gt;        minorTickCount: 1&lt;br /&gt;        snapToTicks: true&lt;br /&gt;        showTickMarks: true&lt;br /&gt;        min: 0&lt;br /&gt;        max: bind 468;//dataSubset.size()&lt;br /&gt;        value: bind beginSliderValue with inverse&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    var endSlider = Slider {&lt;br /&gt;        id: "endSlider"&lt;br /&gt;        blockIncrement: 10.0&lt;br /&gt;        majorTickUnit: 50&lt;br /&gt;        minorTickCount: 1&lt;br /&gt;        snapToTicks: true&lt;br /&gt;        showTickMarks: true&lt;br /&gt;        min: 0&lt;br /&gt;        max: 468;//bind dataSubset.size()&lt;br /&gt;        value: bind endSliderValue with inverse&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;// Panel stuff&lt;br /&gt;&lt;br /&gt;    var panel:Panel = Panel {&lt;br /&gt;        var bottomHeight:Number;&lt;br /&gt;        width: bind width&lt;br /&gt;        height: bind height&lt;br /&gt;        content: [&lt;br /&gt;            lineChart,&lt;br /&gt;            beginSlider,&lt;br /&gt;            endSlider&lt;br /&gt;        ]&lt;br /&gt;        onLayout: function():Void {&lt;br /&gt;            bottomHeight = 0;&lt;br /&gt;            for (node in getManaged(panel.content)) {&lt;br /&gt;                if (node.id == "beginSlider") {&lt;br /&gt;                    bottomHeight = bottomHeight + getNodePrefHeight(node);&lt;br /&gt;                    setNodeWidth(node, (panel.width - 100)/2);&lt;br /&gt;                    positionNode(node, 20, panel.height);&lt;br /&gt;                }&lt;br /&gt;                if (node.id == "endSlider") {&lt;br /&gt;                    setNodeWidth(node, (panel.width - 100)/2);&lt;br /&gt;                    positionNode(node, panel.width/2, panel.height);&lt;br /&gt;                }&lt;br /&gt;                if (node.id == "lineChart") {&lt;br /&gt;                    setNodeWidth(node, panel.width - 50);&lt;br /&gt;                    setNodeHeight(node, panel.height - bottomHeight - 50);&lt;br /&gt;                    positionNode(node, 50, 32);&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        prefWidth: function(height:Number):Number {&lt;br /&gt;            return panel.width;&lt;br /&gt;        }&lt;br /&gt;        prefHeight: function(width:Number):Number {&lt;br /&gt;            return panel.height;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;    };&lt;br /&gt;&lt;br /&gt;    override function getPrefWidth(height:Number):Number {&lt;br /&gt;        // compute preferred width based on own content/state&lt;br /&gt;        // may query preferred widths of children during computation&lt;br /&gt;        var prefWidth = lineChart.width;&lt;br /&gt;        return prefWidth;&lt;br /&gt;    }&lt;br /&gt;    override function getPrefHeight(width:Number):Number {&lt;br /&gt;        // compute preferred height based on won content/state&lt;br /&gt;        // may query preferred heights of children during computation&lt;br /&gt;        var prefHeight = lineChart.height + beginSlider.height + endSlider.height;&lt;br /&gt;        return prefHeight;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    override var width on replace {&lt;br /&gt;        requestLayout();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    override var height on replace {&lt;br /&gt;        requestLayout();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    override var layoutInfo: LayoutInfoBase = LayoutInfo {&lt;br /&gt;        hfill: true vfill: true&lt;br /&gt;        hgrow: Priority.ALWAYS vgrow: Priority.ALWAYS&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    // ensure layoutBounds tracks current width/height&lt;br /&gt;    override var layoutBounds = bind BoundingBox {&lt;br /&gt;        minX: 0&lt;br /&gt;        minY: 0&lt;br /&gt;        width: this.width&lt;br /&gt;        height: this.height&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    override var children = bind panel;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;It needs the nl.tikal.finance.transaction.util.ChartUtil class, which does the calculation of the new lower and upper bounds and of the label values on the yAxis.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;code class="java"&gt;&lt;br /&gt;/*&lt;br /&gt; * To change this template, choose Tools | Templates&lt;br /&gt; * and open the template in the editor.&lt;br /&gt; */&lt;br /&gt;&lt;br /&gt;package nl.tikal.finance.transaction.util;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; *&lt;br /&gt; * @author André Hogenkamp&lt;br /&gt; */&lt;br /&gt;public class ChartUtil {&lt;br /&gt;&lt;br /&gt;    public static Integer calculateFloorPowerOfTen(Integer number) {&lt;br /&gt;        Integer powerOfTen = 0;&lt;br /&gt;        Double number2 = number/10.0;&lt;br /&gt;        while (number2 &gt; 10) {&lt;br /&gt;            powerOfTen++;&lt;br /&gt;            number2 = number2/10;&lt;br /&gt;        }&lt;br /&gt;        Double d = new Double(Math.pow(10, powerOfTen));&lt;br /&gt;        Integer result = new Double(Math.floor(number2) * d).intValue();&lt;br /&gt;        if (result == 0) {&lt;br /&gt;            result = 1;&lt;br /&gt;        }&lt;br /&gt;        return result;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public static Float calculateUpperbound(Float upperbound, Integer tickUnit) {&lt;br /&gt;        float temp = upperbound/tickUnit;&lt;br /&gt;        return new Float(Math.ceil(new Float(temp).doubleValue()) * tickUnit);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public static Float calculateLowerbound(Float upperbound, Integer tickUnit) {&lt;br /&gt;        float temp = upperbound/tickUnit;&lt;br /&gt;        return new Float(Math.floor(new Float(temp).doubleValue()) * tickUnit);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3370527929433173283-4912913237211175403?l=andre86blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3370527929433173283/posts/default/4912913237211175403'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3370527929433173283/posts/default/4912913237211175403'/><link rel='alternate' type='text/html' href='http://andre86blog.blogspot.com/2011/02/javafx-zoomable-linechart.html' title='JavaFX zoomable LineChart'/><author><name>Andre Hogenkamp</name><uri>http://www.blogger.com/profile/10425828227626608950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_JkqrGS_uG98/TVGt0wBWKzI/AAAAAAAABPo/X4k32EDn-z0/s72-c/Screenshot-Transactions.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3370527929433173283.post-5120914908511699381</id><published>2010-12-30T18:30:00.007+01:00</published><updated>2010-12-30T18:55:58.675+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><category scheme='http://www.blogger.com/atom/ns#' term='javafx'/><title type='text'>JavaFX and Spring</title><content type='html'>Working with JavaFX is fun, but when you want to develop more complex programs some help is welcome. Since using Spring usually helps me very much I decided to try the combination of JavaFX and Spring.&lt;br /&gt;&lt;br /&gt;On the web you will find some examples of using JavaFX and Spring, but they start from the java side. I wanted to start from the JavaFX side, meaning write the JavaFX UI base class as normal and wire the Spring beans in there. Then start the JavaFX UI class as main.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code class="java"&gt;&lt;br /&gt;var ctx:ApplicationContext = new ClassPathXmlApplicationContext("application-context.xml");&lt;br /&gt;var dataManagement:DataManagement = ctx.getBean("dataManagement") as DataManagement;&lt;br /&gt;def width = 800;&lt;br /&gt;def height = 500;&lt;br /&gt;def  scene: Scene = Scene {&lt;br /&gt;    width: width&lt;br /&gt;    height: height&lt;br /&gt;    content:&lt;br /&gt;        Stack {&lt;br /&gt;            width: bind scene.width&lt;br /&gt;            height: bind scene.height&lt;br /&gt;            padding: Insets { top: 4 right: 4 bottom: 4 left: 4}&lt;br /&gt;            content: [&lt;br /&gt;                dataManagement&lt;br /&gt;            ]&lt;br /&gt;        }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Stage {&lt;br /&gt;    title: "Transactions"&lt;br /&gt;    scene: scene&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Since somewhere down the line spring beans have to be injected in a JavaFX class I decide to make the JavaFX classes also beans. So the wiring is done by spring and the GUI is setup by JavaFX. So this main class reads the file application-context.xml to create the ApplicationContext. Then it gets the UI class from the ApplicationContext.&lt;br /&gt;&lt;br /&gt;In the scene var the UI class is used.&lt;br /&gt;&lt;br /&gt;In the application-context file the JavaFX beans are defined, since JavaFX does not understand Spring annotations.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code class="java"&gt;&lt;br /&gt;    &amp;lt;!-- JavaFX config --&amp;gt;&lt;br /&gt;    &amp;lt;bean id="dataManagement" class="nl.tikal.finance.saldo.data.DataManagement" &amp;gt;&lt;br /&gt;        &amp;lt;property name="transactionReader" ref="transactionReader"/&amp;gt;&lt;br /&gt;        &amp;lt;property name="transactionEventHandlerAdapter" ref="transactionEventHandlerAdapter"/&amp;gt;&lt;br /&gt;    &amp;lt;/bean&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;bean id="transactionEventHandlerAdapter" class="nl.tikal.finance.saldo.data.TransactionEventHandlerAdapter" &amp;gt;&lt;br /&gt;        &amp;lt;property name="transactionEventHandler" ref="transactionEventHandler"/&amp;gt;&lt;br /&gt;    &amp;lt;/bean&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The only thing you have to do extra in for the JavaFX beans is the setter methods for all the dependencies you wish to use from spring. The methods must be public.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code class="java"&gt;&lt;br /&gt;&lt;br /&gt;    public function setTransactionReader(transactionReader:TransactionReader):Void {&lt;br /&gt;        this.transactionReader = transactionReader;&lt;br /&gt;    }&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Thats it, spring does all the work for you and you can start the JavaFX class.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3370527929433173283-5120914908511699381?l=andre86blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3370527929433173283/posts/default/5120914908511699381'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3370527929433173283/posts/default/5120914908511699381'/><link rel='alternate' type='text/html' href='http://andre86blog.blogspot.com/2010/12/javafx-and-spring.html' title='JavaFX and Spring'/><author><name>Andre Hogenkamp</name><uri>http://www.blogger.com/profile/10425828227626608950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3370527929433173283.post-2588497137878351090</id><published>2009-11-20T21:58:00.004+01:00</published><updated>2011-10-20T21:06:10.058+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu 9.10'/><category scheme='http://www.blogger.com/atom/ns#' term='network'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='virtualbox'/><title type='text'>No network on virtualbox guest ubuntu</title><content type='html'>When trying ubuntu 9.10 on virtualbox, sometimes there was no network. That was very irritating!&lt;br /&gt;&lt;br /&gt;Luckily there are forums and in one of them the &lt;a href="http://forums.virtualbox.org/viewtopic.php?f=8&amp;amp;t=9687&amp;amp;start=0"&gt;answer&lt;/a&gt; was found:&lt;br /&gt;&lt;br /&gt;Scroll way down the the bottom and the second to last post by TerryE (from 17 sep 2008) says&lt;br /&gt;&lt;div&gt;&lt;div style="color: yellow;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="color: yellow;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;The issue is to do with the persistence model implemented by the udev discover &lt;br /&gt;process because your MAC address has changed. The easiest workaround is to edit the &lt;br /&gt;file /etc/udev/rules.d/70-persistent-net.rules and delete the lines including "'# PCI &lt;br /&gt;Device ..." to end. The net generator will recreate the correct entries on the next &lt;br /&gt;reboot.&lt;/span&gt;&lt;span class="Apple-style-span" style="color: yellow;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div style="color: yellow;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;It works for me.&lt;br /&gt;The only thing is that it will be a pain in the ... to have to edit that file and restart every time there is no network connection :-(&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3370527929433173283-2588497137878351090?l=andre86blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3370527929433173283/posts/default/2588497137878351090'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3370527929433173283/posts/default/2588497137878351090'/><link rel='alternate' type='text/html' href='http://andre86blog.blogspot.com/2009/11/no-network-on-virtualbox-guest-ubuntu.html' title='No network on virtualbox guest ubuntu'/><author><name>Andre Hogenkamp</name><uri>http://www.blogger.com/profile/10425828227626608950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3370527929433173283.post-4779496947574425277</id><published>2009-11-16T10:08:00.016+01:00</published><updated>2009-11-17T21:45:21.671+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='radio'/><category scheme='http://www.blogger.com/atom/ns#' term='top1000'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><category scheme='http://www.blogger.com/atom/ns#' term='veronica'/><title type='text'>My favorite songs</title><content type='html'>The dutch radio station Radio Veronica broadcasts at the end of the year a top 1000 of all times. This list is compiled from listeners who vote for there personal top 10 on the website. There are some restrictions to voting. The songs have to be more than a year old, not all songs are in the list from which you can choose and there may be only one song of a band of musician. This year my list is:&lt;br /&gt;&lt;br /&gt;&lt;div style="color:yellow"&gt;&lt;br /&gt;1. Boston - More Than A Feeling&lt;br /&gt;2. Radiohead - Creep&lt;br /&gt;3. Evanescence - My Immortal&lt;br /&gt;4. Guns 'n Roses - November Rain&lt;br /&gt;5. Metallica - The Unforgiven&lt;br /&gt;6. Air Supply - All Out Of Love&lt;br /&gt;7. Nirvana - Lithium&lt;br /&gt;8. The Babys - Everytime I Think Of You&lt;br /&gt;9. The Cure - A Forest&lt;br /&gt;10. AC/DC - Thunderstruck&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Songs that missed this top 10 were:&lt;br /&gt;&lt;br /&gt;&lt;div style="color:red"&gt;&lt;br /&gt;Roxette:            Fading like a flower&lt;br /&gt;Robert Plant        Big log&lt;br /&gt;Toto                Hold the line&lt;br /&gt;Aerosmith           I don't want to miss a thing&lt;br /&gt;Bryan Adams         Run to you&lt;br /&gt;Bonny Tyler         Total eclipse of the heart&lt;br /&gt;Bon Jovi            Always&lt;br /&gt;The cranberries     Zombie&lt;br /&gt;K's choice          Not an addict&lt;br /&gt;The Cult            Ciao Edie (not on the radio veronica list)&lt;br /&gt;John Miles          Music&lt;br /&gt;Def Leppard         Love bites&lt;br /&gt;Deep purple         Child in time&lt;br /&gt;Ellen Foley         We belong to the night&lt;br /&gt;Pat Benatar         Invincible&lt;br /&gt;The Verve           Bitter sweet symphony&lt;br /&gt;Foreigner           I want to know what love is&lt;br /&gt;Fisher Z            Marliese (not on the radio veronica list)&lt;br /&gt;Gary Moore          Empty rooms&lt;br /&gt;Phil Lynott         Out in the fields (not on the radio veronica list)&lt;br /&gt;Heart               Allies  (not on the radio veronica list)&lt;br /&gt;Kings of leon       Use somebody&lt;br /&gt;Metallica           The unforgiven&lt;br /&gt;Marillion           Lavender&lt;br /&gt;Wihtin Temptation   All I need (not on the radio veronica list)&lt;br /&gt;Meatloaf            Bat out of hell&lt;br /&gt;REO Speedwagon      Keep on loving you&lt;br /&gt;Ozzy Osbourne       Dreamer&lt;br /&gt;Phil Collins        Against all odds&lt;br /&gt;Queen               Who wants to live forever&lt;br /&gt;Survivor            The search is over (not on the radio veronica list)&lt;br /&gt;Skunk Anansie       Weak&lt;br /&gt;Therapy?            Diane&lt;br /&gt;Van Halen           Running with the devil&lt;br /&gt;ZZ Top              Rough boy&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;And these are only the songs I considered for the top 10. There ara so much more good songs out there.&lt;br /&gt;&lt;br /&gt;If you look at the list it probably isn't to hard to guess what music style I like ;-)&lt;br /&gt;And another thing you can see is that, although I am Dutch, there are no dutch songs  on the list. Oh, and no christmas songs to, even if it is the end of the year&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3370527929433173283-4779496947574425277?l=andre86blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3370527929433173283/posts/default/4779496947574425277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3370527929433173283/posts/default/4779496947574425277'/><link rel='alternate' type='text/html' href='http://andre86blog.blogspot.com/2009/11/my-favorite-songs.html' title='My favorite songs'/><author><name>Andre Hogenkamp</name><uri>http://www.blogger.com/profile/10425828227626608950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3370527929433173283.post-3106799749105517108</id><published>2009-11-15T17:55:00.017+01:00</published><updated>2011-10-20T21:04:52.595+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javafx'/><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Setting up JavaFX and Maven2 on Ubuntu</title><content type='html'>I wanted to have a good, IDE independent, working environment. So i made a VirtualBox Ubuntu vm and tried to make JavaFX and Maven work together.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Setting up Maven&lt;/span&gt;&lt;br /&gt;Setting up maven is not to difficult, just search for maven in Synaptic package manager and select maven2. I do wonder why Groovy, Ivy and Velocity also want to be installed. Then edit the settingsfile (in /etc/maven2/) and set your local repository if you don't want the standard repo location&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Setting up JavaFx&lt;/span&gt;&lt;br /&gt;Setting up JavaFX is a bit trickier. It is not in the Synaptic package manager list of apps. You can download it from &lt;a href="http://www.javafx.com/downloads/linux.jsp"&gt;Sun&lt;/a&gt;. This will get a script file which will set up the javafx environment. Since I have not to much experience with linux I had no idea where to put it. I decided to put it in /etc/  (open a terminal,  chmod a+x javafx_sdk-1_2_1-linux-i586.sh, cd to the directory where you want it installed and execute the script with: sudo /home/andre/Downloads/javafx_sdk-1_2_1-linux-i586.sh ). For working with javafx it doesn't really matter, just remember the path, you need it later on.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Making the two work together&lt;/span&gt;&lt;br /&gt;The first thing to do for making maven and javafx work together is to let maven find the javafx compiler. There is a &lt;a href="http://m2-javafxc.sourceforge.net/"&gt;plugin&lt;/a&gt; for maven which does exactly that. The only thing you need then is to make the environment variable JFX_HOME. After looking up how to do &lt;a href="https://help.ubuntu.com/community/EnvironmentVariables"&gt;that&lt;/a&gt;, maven tried to compile a demo class.&lt;br /&gt;&lt;br /&gt;Off course it didn't compile the first time, because the compiler could not find the javafx classes. After searching the net I used &lt;a href="http://blog.nelsonsilva.eu/2008/10/10/javafx-maven-on-ubuntu/"&gt;this way&lt;/a&gt;, but later i want to not haven all the javafx dependencies in my pom, so I need to search for a better way.&lt;br /&gt;&lt;br /&gt;Then it still did not work because I forgot some imports in the javafx class ;-( After fixing that it compiled fine.&lt;br /&gt;&lt;br /&gt;Off course,with that working I wanted more. I wanted to also run it from maven. Since I wasn't the first to want to do that there was an &lt;a href="http://www.jroller.com/alexRuiz/entry/testing_javafx_uis_part_4"&gt;answer&lt;/a&gt; on internet. I only needed the last bit of the comment from Marcos Muíño on the bottom of the page and presto! My first javafx compile, install and run with maven.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;div style="color: yellow;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="color: yellow;"&gt;&lt;br /&gt; &lt;/span&gt;&lt;span class="Apple-style-span" style="color: #274e13;"&gt;         &amp;lt;plugin&amp;gt;&lt;br /&gt;              &amp;lt;groupId&amp;gt;org.codehaus.mojo&amp;lt;/groupId&amp;gt;&lt;br /&gt;              &amp;lt;artifactId&amp;gt;exec-maven-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;              &amp;lt;executions&amp;gt;&lt;br /&gt;                  &amp;lt;execution&amp;gt;&lt;br /&gt;                      &amp;lt;phase&amp;gt;package&amp;lt;/phase&amp;gt;&lt;br /&gt;                      &amp;lt;goals&amp;gt;&lt;br /&gt;                          &amp;lt;goal&amp;gt;exec&amp;lt;/goal&amp;gt;&lt;br /&gt;                      &amp;lt;/goals&amp;gt;&lt;br /&gt;                  &amp;lt;/execution&amp;gt;&lt;br /&gt;              &amp;lt;/executions&amp;gt;&lt;br /&gt;          &amp;lt;configuration&amp;gt;&lt;br /&gt;              &amp;lt;executable&amp;gt;/opt/javafx-sdk1.2/bin/javafx&amp;lt;/executable&amp;gt;&lt;br /&gt;              &amp;lt;arguments&amp;gt;&lt;br /&gt;                  &amp;lt;argument&amp;gt;nl.tikal.common.javafxmavenproject.Controls&amp;lt;/argument&amp;gt;&lt;br /&gt;                  &amp;lt;argument&amp;gt;-classpath&amp;lt;/argument&amp;gt;&lt;br /&gt;                  &amp;lt;classpath /&amp;gt;&lt;br /&gt;              &amp;lt;/arguments&amp;gt;&lt;br /&gt;              &amp;lt;/configuration&amp;gt;&lt;br /&gt;          &amp;lt;/plugin&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;div style="color: yellow;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;TODO:&lt;/span&gt;&lt;br /&gt;Removing the javafx dependencies from the pom.&lt;br /&gt;&lt;br /&gt;Making maven work with combined JavaFx and Java projects.&lt;br /&gt;http://sourceforge.net/apps/mediawiki/jfxpictureview/index.php?title=Using_Maven_2_with_JavaFX&lt;br /&gt;&lt;br /&gt;The complete pom&lt;br /&gt;&lt;div&gt;&lt;div style="color: yellow;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="color: yellow;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&amp;lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&lt;br /&gt;  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"&amp;gt;&lt;br /&gt;  &amp;lt;modelVersion&amp;gt;4.0.0&amp;lt;/modelVersion&amp;gt;&lt;br /&gt;  &amp;lt;groupId&amp;gt;nl.tikal.common&amp;lt;/groupId&amp;gt;&lt;br /&gt;  &amp;lt;artifactId&amp;gt;JavaFxMavenProject&amp;lt;/artifactId&amp;gt;&lt;br /&gt;  &amp;lt;packaging&amp;gt;jar&amp;lt;/packaging&amp;gt;&lt;br /&gt;  &amp;lt;version&amp;gt;1.0-SNAPSHOT&amp;lt;/version&amp;gt;&lt;br /&gt;  &amp;lt;name&amp;gt;JavaFxMavenProject&amp;lt;/name&amp;gt;&lt;br /&gt;  &amp;lt;url&amp;gt;http://maven.apache.org&amp;lt;/url&amp;gt;&lt;br /&gt;  &amp;lt;properties&amp;gt;&lt;br /&gt;    &amp;lt;javafx.home&amp;gt;/opt/javafx-sdk1.2&amp;lt;/javafx.home&amp;gt;&lt;br /&gt;  &amp;lt;/properties&amp;gt;&lt;br /&gt;  &amp;lt;dependencies&amp;gt;&lt;br /&gt;    &amp;lt;dependency&amp;gt;&lt;br /&gt;      &amp;lt;groupId&amp;gt;javafx&amp;lt;/groupId&amp;gt;&lt;br /&gt;      &amp;lt;artifactId&amp;gt;compiler&amp;lt;/artifactId&amp;gt;&lt;br /&gt;      &amp;lt;version&amp;gt;1.2&amp;lt;/version&amp;gt;&lt;br /&gt;      &amp;lt;scope&amp;gt;system&amp;lt;/scope&amp;gt;&lt;br /&gt;      &amp;lt;systemPath&amp;gt;${javafx.home}/lib/shared/javafxc.jar&amp;lt;/systemPath&amp;gt;&lt;br /&gt;    &amp;lt;/dependency&amp;gt;&lt;br /&gt;    &amp;lt;dependency&amp;gt;&lt;br /&gt;      &amp;lt;groupId&amp;gt;javafx&amp;lt;/groupId&amp;gt;&lt;br /&gt;      &amp;lt;artifactId&amp;gt;runtime&amp;lt;/artifactId&amp;gt;&lt;br /&gt;      &amp;lt;version&amp;gt;1.2&amp;lt;/version&amp;gt;&lt;br /&gt;      &amp;lt;scope&amp;gt;system&amp;lt;/scope&amp;gt;&lt;br /&gt;      &amp;lt;systemPath&amp;gt;${javafx.home}/lib/shared/javafxrt.jar&amp;lt;/systemPath&amp;gt;&lt;br /&gt;    &amp;lt;/dependency&amp;gt;&lt;br /&gt;    &amp;lt;dependency&amp;gt;&lt;br /&gt;      &amp;lt;groupId&amp;gt;javafx&amp;lt;/groupId&amp;gt;&lt;br /&gt;      &amp;lt;artifactId&amp;gt;desktop-rt15&amp;lt;/artifactId&amp;gt;&lt;br /&gt;      &amp;lt;version&amp;gt;1.2&amp;lt;/version&amp;gt;&lt;br /&gt;      &amp;lt;scope&amp;gt;system&amp;lt;/scope&amp;gt;&lt;br /&gt;      &amp;lt;systemPath&amp;gt;${javafx.home}/lib/desktop/rt15.jar&amp;lt;/systemPath&amp;gt;&lt;br /&gt;    &amp;lt;/dependency&amp;gt;&lt;br /&gt;    &amp;lt;dependency&amp;gt;&lt;br /&gt;      &amp;lt;groupId&amp;gt;javafx&amp;lt;/groupId&amp;gt;&lt;br /&gt;      &amp;lt;artifactId&amp;gt;geom&amp;lt;/artifactId&amp;gt;&lt;br /&gt;      &amp;lt;version&amp;gt;1.2&amp;lt;/version&amp;gt;&lt;br /&gt;      &amp;lt;scope&amp;gt;system&amp;lt;/scope&amp;gt;&lt;br /&gt;      &amp;lt;systemPath&amp;gt;${javafx.home}/lib/desktop/javafx-geom.jar&amp;lt;/systemPath&amp;gt;&lt;br /&gt;    &amp;lt;/dependency&amp;gt;&lt;br /&gt;    &amp;lt;dependency&amp;gt;&lt;br /&gt;      &amp;lt;groupId&amp;gt;javafx&amp;lt;/groupId&amp;gt;&lt;br /&gt;      &amp;lt;artifactId&amp;gt;ui-common&amp;lt;/artifactId&amp;gt;&lt;br /&gt;      &amp;lt;version&amp;gt;1.2&amp;lt;/version&amp;gt;&lt;br /&gt;      &amp;lt;scope&amp;gt;system&amp;lt;/scope&amp;gt;&lt;br /&gt;      &amp;lt;systemPath&amp;gt;${javafx.home}/lib/desktop/javafx-ui-common.jar&amp;lt;/systemPath&amp;gt;&lt;br /&gt;    &amp;lt;/dependency&amp;gt;&lt;br /&gt;    &amp;lt;dependency&amp;gt;&lt;br /&gt;      &amp;lt;groupId&amp;gt;javafx&amp;lt;/groupId&amp;gt;&lt;br /&gt;      &amp;lt;artifactId&amp;gt;ui-desktop&amp;lt;/artifactId&amp;gt;&lt;br /&gt;      &amp;lt;version&amp;gt;1.2&amp;lt;/version&amp;gt;&lt;br /&gt;      &amp;lt;scope&amp;gt;system&amp;lt;/scope&amp;gt;&lt;br /&gt;      &amp;lt;systemPath&amp;gt;${javafx.home}/lib/desktop/javafx-ui-desktop.jar&amp;lt;/systemPath&amp;gt;&lt;br /&gt;    &amp;lt;/dependency&amp;gt;&lt;br /&gt;    &amp;lt;dependency&amp;gt;&lt;br /&gt;      &amp;lt;groupId&amp;gt;javafx&amp;lt;/groupId&amp;gt;&lt;br /&gt;      &amp;lt;artifactId&amp;gt;ui-swing&amp;lt;/artifactId&amp;gt;&lt;br /&gt;      &amp;lt;version&amp;gt;1.2&amp;lt;/version&amp;gt;&lt;br /&gt;      &amp;lt;scope&amp;gt;system&amp;lt;/scope&amp;gt;&lt;br /&gt;      &amp;lt;systemPath&amp;gt;${javafx.home}/lib/desktop/javafx-ui-swing.jar&amp;lt;/systemPath&amp;gt;&lt;br /&gt;    &amp;lt;/dependency&amp;gt;&lt;br /&gt;    &amp;lt;dependency&amp;gt;&lt;br /&gt;      &amp;lt;groupId&amp;gt;javafx&amp;lt;/groupId&amp;gt;&lt;br /&gt;      &amp;lt;artifactId&amp;gt;fxdloader&amp;lt;/artifactId&amp;gt;&lt;br /&gt;      &amp;lt;version&amp;gt;1.2&amp;lt;/version&amp;gt;&lt;br /&gt;      &amp;lt;scope&amp;gt;system&amp;lt;/scope&amp;gt;&lt;br /&gt;      &amp;lt;systemPath&amp;gt;${javafx.home}/lib/desktop/fxdloader.jar&amp;lt;/systemPath&amp;gt;&lt;br /&gt;    &amp;lt;/dependency&amp;gt;&lt;br /&gt;    &amp;lt;dependency&amp;gt;&lt;br /&gt;      &amp;lt;groupId&amp;gt;javafx&amp;lt;/groupId&amp;gt;&lt;br /&gt;      &amp;lt;artifactId&amp;gt;websvc&amp;lt;/artifactId&amp;gt;&lt;br /&gt;      &amp;lt;version&amp;gt;1.2&amp;lt;/version&amp;gt;&lt;br /&gt;      &amp;lt;scope&amp;gt;system&amp;lt;/scope&amp;gt;&lt;br /&gt;      &amp;lt;systemPath&amp;gt;${javafx.home}/lib/desktop/websvc.jar&amp;lt;/systemPath&amp;gt;&lt;br /&gt;    &amp;lt;/dependency&amp;gt;&lt;br /&gt;    &amp;lt;dependency&amp;gt;&lt;br /&gt;      &amp;lt;groupId&amp;gt;javafx&amp;lt;/groupId&amp;gt;&lt;br /&gt;      &amp;lt;artifactId&amp;gt;ui-controls&amp;lt;/artifactId&amp;gt;&lt;br /&gt;      &amp;lt;version&amp;gt;1.2&amp;lt;/version&amp;gt;&lt;br /&gt;      &amp;lt;scope&amp;gt;system&amp;lt;/scope&amp;gt;&lt;br /&gt;      &amp;lt;systemPath&amp;gt;${javafx.home}/lib/desktop/javafx-ui-controls.jar&amp;lt;/systemPath&amp;gt;&lt;br /&gt;    &amp;lt;/dependency&amp;gt;&lt;br /&gt;    &amp;lt;dependency&amp;gt;&lt;br /&gt;      &amp;lt;groupId&amp;gt;javafx&amp;lt;/groupId&amp;gt;&lt;br /&gt;      &amp;lt;artifactId&amp;gt;ui-charts&amp;lt;/artifactId&amp;gt;&lt;br /&gt;      &amp;lt;version&amp;gt;1.2&amp;lt;/version&amp;gt;&lt;br /&gt;      &amp;lt;scope&amp;gt;system&amp;lt;/scope&amp;gt;&lt;br /&gt;      &amp;lt;systemPath&amp;gt;${javafx.home}/lib/desktop/javafx-ui-charts.jar&amp;lt;/systemPath&amp;gt;&lt;br /&gt;    &amp;lt;/dependency&amp;gt;&lt;br /&gt;    &amp;lt;dependency&amp;gt;&lt;br /&gt;      &amp;lt;groupId&amp;gt;javafx&amp;lt;/groupId&amp;gt;&lt;br /&gt;      &amp;lt;artifactId&amp;gt;common&amp;lt;/artifactId&amp;gt;&lt;br /&gt;      &amp;lt;version&amp;gt;1.2&amp;lt;/version&amp;gt;&lt;br /&gt;      &amp;lt;scope&amp;gt;system&amp;lt;/scope&amp;gt;&lt;br /&gt;      &amp;lt;systemPath&amp;gt;${javafx.home}/lib/desktop/javafx-common.jar&amp;lt;/systemPath&amp;gt;&lt;br /&gt;    &amp;lt;/dependency&amp;gt;&lt;br /&gt;    &amp;lt;dependency&amp;gt;&lt;br /&gt;      &amp;lt;groupId&amp;gt;javafx&amp;lt;/groupId&amp;gt;&lt;br /&gt;      &amp;lt;artifactId&amp;gt;io&amp;lt;/artifactId&amp;gt;&lt;br /&gt;      &amp;lt;version&amp;gt;1.2&amp;lt;/version&amp;gt;&lt;br /&gt;      &amp;lt;scope&amp;gt;system&amp;lt;/scope&amp;gt;&lt;br /&gt;      &amp;lt;systemPath&amp;gt;${javafx.home}/lib/desktop/javafx-io.jar&amp;lt;/systemPath&amp;gt;&lt;br /&gt;    &amp;lt;/dependency&amp;gt;&lt;br /&gt;    &amp;lt;dependency&amp;gt;&lt;br /&gt;      &amp;lt;groupId&amp;gt;javafx&amp;lt;/groupId&amp;gt;&lt;br /&gt;      &amp;lt;artifactId&amp;gt;eula&amp;lt;/artifactId&amp;gt;&lt;br /&gt;      &amp;lt;version&amp;gt;1.2&amp;lt;/version&amp;gt;&lt;br /&gt;      &amp;lt;scope&amp;gt;system&amp;lt;/scope&amp;gt;&lt;br /&gt;      &amp;lt;systemPath&amp;gt;${javafx.home}/lib/desktop/eula.jar&amp;lt;/systemPath&amp;gt;&lt;br /&gt;    &amp;lt;/dependency&amp;gt;&lt;br /&gt;    &amp;lt;dependency&amp;gt;&lt;br /&gt;      &amp;lt;groupId&amp;gt;javafx&amp;lt;/groupId&amp;gt;&lt;br /&gt;      &amp;lt;artifactId&amp;gt;anim&amp;lt;/artifactId&amp;gt;&lt;br /&gt;      &amp;lt;version&amp;gt;1.2&amp;lt;/version&amp;gt;&lt;br /&gt;      &amp;lt;scope&amp;gt;system&amp;lt;/scope&amp;gt;&lt;br /&gt;      &amp;lt;systemPath&amp;gt;${javafx.home}/lib/desktop/javafx-anim.jar&amp;lt;/systemPath&amp;gt;&lt;br /&gt;    &amp;lt;/dependency&amp;gt;&lt;br /&gt;    &amp;lt;dependency&amp;gt;&lt;br /&gt;      &amp;lt;groupId&amp;gt;javafx&amp;lt;/groupId&amp;gt;&lt;br /&gt;      &amp;lt;artifactId&amp;gt;decora-runtime&amp;lt;/artifactId&amp;gt;&lt;br /&gt;      &amp;lt;version&amp;gt;1.2&amp;lt;/version&amp;gt;&lt;br /&gt;      &amp;lt;scope&amp;gt;system&amp;lt;/scope&amp;gt;&lt;br /&gt;      &amp;lt;systemPath&amp;gt;${javafx.home}/lib/desktop/decora-runtime.jar&amp;lt;/systemPath&amp;gt;&lt;br /&gt;    &amp;lt;/dependency&amp;gt;&lt;br /&gt;    &amp;lt;dependency&amp;gt;&lt;br /&gt;      &amp;lt;groupId&amp;gt;javafx&amp;lt;/groupId&amp;gt;&lt;br /&gt;      &amp;lt;artifactId&amp;gt;decora-j2d-rsl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;      &amp;lt;version&amp;gt;1.2&amp;lt;/version&amp;gt;&lt;br /&gt;      &amp;lt;scope&amp;gt;system&amp;lt;/scope&amp;gt;&lt;br /&gt;      &amp;lt;systemPath&amp;gt;${javafx.home}/lib/desktop/decora-j2d-rsl.jar&amp;lt;/systemPath&amp;gt;&lt;br /&gt;    &amp;lt;/dependency&amp;gt;&lt;br /&gt;    &amp;lt;dependency&amp;gt;&lt;br /&gt;      &amp;lt;groupId&amp;gt;javafx&amp;lt;/groupId&amp;gt;&lt;br /&gt;      &amp;lt;artifactId&amp;gt;decora-ogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;      &amp;lt;version&amp;gt;1.2&amp;lt;/version&amp;gt;&lt;br /&gt;      &amp;lt;scope&amp;gt;system&amp;lt;/scope&amp;gt;&lt;br /&gt;      &amp;lt;systemPath&amp;gt;${javafx.home}/lib/desktop/decora-ogl.jar&amp;lt;/systemPath&amp;gt;&lt;br /&gt;    &amp;lt;/dependency&amp;gt;&lt;br /&gt;    &amp;lt;dependency&amp;gt;&lt;br /&gt;      &amp;lt;groupId&amp;gt;javafx&amp;lt;/groupId&amp;gt;&lt;br /&gt;      &amp;lt;artifactId&amp;gt;sg-common&amp;lt;/artifactId&amp;gt;&lt;br /&gt;      &amp;lt;version&amp;gt;1.2&amp;lt;/version&amp;gt;&lt;br /&gt;      &amp;lt;scope&amp;gt;system&amp;lt;/scope&amp;gt;&lt;br /&gt;      &amp;lt;systemPath&amp;gt;${javafx.home}/lib/desktop/javafx-sg-common.jar&amp;lt;/systemPath&amp;gt;&lt;br /&gt;    &amp;lt;/dependency&amp;gt;&lt;br /&gt;    &amp;lt;dependency&amp;gt;&lt;br /&gt;      &amp;lt;groupId&amp;gt;javafx&amp;lt;/groupId&amp;gt;&lt;br /&gt;      &amp;lt;artifactId&amp;gt;sg-swing&amp;lt;/artifactId&amp;gt;&lt;br /&gt;      &amp;lt;version&amp;gt;1.2&amp;lt;/version&amp;gt;&lt;br /&gt;      &amp;lt;scope&amp;gt;system&amp;lt;/scope&amp;gt;&lt;br /&gt;      &amp;lt;systemPath&amp;gt;${javafx.home}/lib/desktop/javafx-sg-swing.jar&amp;lt;/systemPath&amp;gt;&lt;br /&gt;    &amp;lt;/dependency&amp;gt;&lt;br /&gt;    &amp;lt;dependency&amp;gt;&lt;br /&gt;      &amp;lt;groupId&amp;gt;javafx&amp;lt;/groupId&amp;gt;&lt;br /&gt;      &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;      &amp;lt;version&amp;gt;1.2&amp;lt;/version&amp;gt;&lt;br /&gt;      &amp;lt;scope&amp;gt;system&amp;lt;/scope&amp;gt;&lt;br /&gt;      &amp;lt;systemPath&amp;gt;${javafx.home}/lib/desktop/jogl.jar&amp;lt;/systemPath&amp;gt;&lt;br /&gt;    &amp;lt;/dependency&amp;gt;&lt;br /&gt;    &amp;lt;dependency&amp;gt;&lt;br /&gt;      &amp;lt;groupId&amp;gt;javafx&amp;lt;/groupId&amp;gt;&lt;br /&gt;      &amp;lt;artifactId&amp;gt;gluegen-rt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;      &amp;lt;version&amp;gt;1.2&amp;lt;/version&amp;gt;&lt;br /&gt;      &amp;lt;scope&amp;gt;system&amp;lt;/scope&amp;gt;&lt;br /&gt;      &amp;lt;systemPath&amp;gt;${javafx.home}/lib/desktop/gluegen-rt.jar&amp;lt;/systemPath&amp;gt;&lt;br /&gt;    &amp;lt;/dependency&amp;gt;&lt;br /&gt;    &amp;lt;dependency&amp;gt;&lt;br /&gt;      &amp;lt;groupId&amp;gt;javafx&amp;lt;/groupId&amp;gt;&lt;br /&gt;      &amp;lt;artifactId&amp;gt;jmc&amp;lt;/artifactId&amp;gt;&lt;br /&gt;      &amp;lt;version&amp;gt;1.2&amp;lt;/version&amp;gt;&lt;br /&gt;      &amp;lt;scope&amp;gt;system&amp;lt;/scope&amp;gt;&lt;br /&gt;      &amp;lt;systemPath&amp;gt;${javafx.home}/lib/desktop/jmc.jar&amp;lt;/systemPath&amp;gt;&lt;br /&gt;    &amp;lt;/dependency&amp;gt;&lt;br /&gt;    &amp;lt;dependency&amp;gt;&lt;br /&gt;      &amp;lt;groupId&amp;gt;javafx&amp;lt;/groupId&amp;gt;&lt;br /&gt;      &amp;lt;artifactId&amp;gt;script-api&amp;lt;/artifactId&amp;gt;&lt;br /&gt;      &amp;lt;version&amp;gt;1.2&amp;lt;/version&amp;gt;&lt;br /&gt;      &amp;lt;scope&amp;gt;system&amp;lt;/scope&amp;gt;&lt;br /&gt;      &amp;lt;systemPath&amp;gt;${javafx.home}/lib/desktop/script-api.jar&amp;lt;/systemPath&amp;gt;&lt;br /&gt;    &amp;lt;/dependency&amp;gt;&lt;br /&gt;    &amp;lt;dependency&amp;gt;&lt;br /&gt;      &amp;lt;groupId&amp;gt;javafx&amp;lt;/groupId&amp;gt;&lt;br /&gt;      &amp;lt;artifactId&amp;gt;mobile-cldc&amp;lt;/artifactId&amp;gt;&lt;br /&gt;      &amp;lt;version&amp;gt;1.2&amp;lt;/version&amp;gt;&lt;br /&gt;      &amp;lt;scope&amp;gt;system&amp;lt;/scope&amp;gt;&lt;br /&gt;      &amp;lt;systemPath&amp;gt;${javafx.home}/lib/mobile/javafxapi-cldc.jar&amp;lt;/systemPath&amp;gt;&lt;br /&gt;    &amp;lt;/dependency&amp;gt;&lt;br /&gt;    &amp;lt;dependency&amp;gt;&lt;br /&gt;      &amp;lt;groupId&amp;gt;javafx&amp;lt;/groupId&amp;gt;&lt;br /&gt;      &amp;lt;artifactId&amp;gt;mobile-cldc_1.1&amp;lt;/artifactId&amp;gt;&lt;br /&gt;      &amp;lt;version&amp;gt;1.2&amp;lt;/version&amp;gt;&lt;br /&gt;      &amp;lt;scope&amp;gt;system&amp;lt;/scope&amp;gt;&lt;br /&gt;      &amp;lt;systemPath&amp;gt;${javafx.home}/lib/mobile/cldc_1.1.jar&amp;lt;/systemPath&amp;gt;&lt;br /&gt;    &amp;lt;/dependency&amp;gt;&lt;br /&gt;    &amp;lt;dependency&amp;gt;&lt;br /&gt;      &amp;lt;groupId&amp;gt;javafx&amp;lt;/groupId&amp;gt;&lt;br /&gt;      &amp;lt;artifactId&amp;gt;mobile-midp_2.0&amp;lt;/artifactId&amp;gt;&lt;br /&gt;      &amp;lt;version&amp;gt;1.2&amp;lt;/version&amp;gt;&lt;br /&gt;      &amp;lt;scope&amp;gt;system&amp;lt;/scope&amp;gt;&lt;br /&gt;      &amp;lt;systemPath&amp;gt;${javafx.home}/lib/mobile/midp_2.0.jar&amp;lt;/systemPath&amp;gt;&lt;br /&gt;    &amp;lt;/dependency&amp;gt;&lt;br /&gt;    &amp;lt;dependency&amp;gt;&lt;br /&gt;      &amp;lt;groupId&amp;gt;javafx&amp;lt;/groupId&amp;gt;&lt;br /&gt;      &amp;lt;artifactId&amp;gt;mobile-jsr120_1.1&amp;lt;/artifactId&amp;gt;&lt;br /&gt;      &amp;lt;version&amp;gt;1.2&amp;lt;/version&amp;gt;&lt;br /&gt;      &amp;lt;scope&amp;gt;system&amp;lt;/scope&amp;gt;&lt;br /&gt;      &amp;lt;systemPath&amp;gt;${javafx.home}/lib/mobile/jsr120_1.1.jar&amp;lt;/systemPath&amp;gt;&lt;br /&gt;    &amp;lt;/dependency&amp;gt;&lt;br /&gt;    &amp;lt;dependency&amp;gt;&lt;br /&gt;      &amp;lt;groupId&amp;gt;javafx&amp;lt;/groupId&amp;gt;&lt;br /&gt;      &amp;lt;artifactId&amp;gt;mobile-jsr135_1.1&amp;lt;/artifactId&amp;gt;&lt;br /&gt;      &amp;lt;version&amp;gt;1.2&amp;lt;/version&amp;gt;&lt;br /&gt;      &amp;lt;scope&amp;gt;system&amp;lt;/scope&amp;gt;&lt;br /&gt;      &amp;lt;systemPath&amp;gt;${javafx.home}/lib/mobile/jsr135_1.1.jar&amp;lt;/systemPath&amp;gt;&lt;br /&gt;    &amp;lt;/dependency&amp;gt;&lt;br /&gt;    &amp;lt;dependency&amp;gt;&lt;br /&gt;      &amp;lt;groupId&amp;gt;javafx&amp;lt;/groupId&amp;gt;&lt;br /&gt;      &amp;lt;artifactId&amp;gt;mobile-jsr172_1.0&amp;lt;/artifactId&amp;gt;&lt;br /&gt;      &amp;lt;version&amp;gt;1.2&amp;lt;/version&amp;gt;&lt;br /&gt;      &amp;lt;scope&amp;gt;system&amp;lt;/scope&amp;gt;&lt;br /&gt;      &amp;lt;systemPath&amp;gt;${javafx.home}/lib/mobile/jsr172_1.0.jar&amp;lt;/systemPath&amp;gt;&lt;br /&gt;    &amp;lt;/dependency&amp;gt;&lt;br /&gt;    &amp;lt;dependency&amp;gt;&lt;br /&gt;      &amp;lt;groupId&amp;gt;javafx&amp;lt;/groupId&amp;gt;&lt;br /&gt;      &amp;lt;artifactId&amp;gt;mobile-jsr177_1.0&amp;lt;/artifactId&amp;gt;&lt;br /&gt;      &amp;lt;version&amp;gt;1.2&amp;lt;/version&amp;gt;&lt;br /&gt;      &amp;lt;scope&amp;gt;system&amp;lt;/scope&amp;gt;&lt;br /&gt;      &amp;lt;systemPath&amp;gt;${javafx.home}/lib/mobile/jsr177_1.0.jar&amp;lt;/systemPath&amp;gt;&lt;br /&gt;    &amp;lt;/dependency&amp;gt;&lt;br /&gt;    &amp;lt;dependency&amp;gt;&lt;br /&gt;      &amp;lt;groupId&amp;gt;javafx&amp;lt;/groupId&amp;gt;&lt;br /&gt;      &amp;lt;artifactId&amp;gt;mobile-jsr179_1.0&amp;lt;/artifactId&amp;gt;&lt;br /&gt;      &amp;lt;version&amp;gt;1.2&amp;lt;/version&amp;gt;&lt;br /&gt;      &amp;lt;scope&amp;gt;system&amp;lt;/scope&amp;gt;&lt;br /&gt;      &amp;lt;systemPath&amp;gt;${javafx.home}/lib/mobile/jsr179_1.0.jar&amp;lt;/systemPath&amp;gt;&lt;br /&gt;    &amp;lt;/dependency&amp;gt;&lt;br /&gt;    &amp;lt;dependency&amp;gt;&lt;br /&gt;      &amp;lt;groupId&amp;gt;javafx&amp;lt;/groupId&amp;gt;&lt;br /&gt;      &amp;lt;artifactId&amp;gt;mobile-jsr184_1.1&amp;lt;/artifactId&amp;gt;&lt;br /&gt;      &amp;lt;version&amp;gt;1.2&amp;lt;/version&amp;gt;&lt;br /&gt;      &amp;lt;scope&amp;gt;system&amp;lt;/scope&amp;gt;&lt;br /&gt;      &amp;lt;systemPath&amp;gt;${javafx.home}/lib/mobile/jsr184_1.1.jar&amp;lt;/systemPath&amp;gt;&lt;br /&gt;    &amp;lt;/dependency&amp;gt;&lt;br /&gt;    &amp;lt;dependency&amp;gt;&lt;br /&gt;      &amp;lt;groupId&amp;gt;javafx&amp;lt;/groupId&amp;gt;&lt;br /&gt;      &amp;lt;artifactId&amp;gt;mobile-jsr234_1.0&amp;lt;/artifactId&amp;gt;&lt;br /&gt;      &amp;lt;version&amp;gt;1.2&amp;lt;/version&amp;gt;&lt;br /&gt;      &amp;lt;scope&amp;gt;system&amp;lt;/scope&amp;gt;&lt;br /&gt;      &amp;lt;systemPath&amp;gt;${javafx.home}/lib/mobile/jsr234_1.0.jar&amp;lt;/systemPath&amp;gt;&lt;br /&gt;    &amp;lt;/dependency&amp;gt;&lt;br /&gt;    &amp;lt;dependency&amp;gt;&lt;br /&gt;      &amp;lt;groupId&amp;gt;javafx&amp;lt;/groupId&amp;gt;&lt;br /&gt;      &amp;lt;artifactId&amp;gt;mobile-jsr256_1.1&amp;lt;/artifactId&amp;gt;&lt;br /&gt;      &amp;lt;version&amp;gt;1.2&amp;lt;/version&amp;gt;&lt;br /&gt;      &amp;lt;scope&amp;gt;system&amp;lt;/scope&amp;gt;&lt;br /&gt;      &amp;lt;systemPath&amp;gt;${javafx.home}/lib/mobile/jsr256_1.1.jar&amp;lt;/systemPath&amp;gt;&lt;br /&gt;    &amp;lt;/dependency&amp;gt;&lt;br /&gt;    &amp;lt;dependency&amp;gt;&lt;br /&gt;      &amp;lt;groupId&amp;gt;javafx&amp;lt;/groupId&amp;gt;&lt;br /&gt;      &amp;lt;artifactId&amp;gt;mobile-jsr75_1.0&amp;lt;/artifactId&amp;gt;&lt;br /&gt;      &amp;lt;version&amp;gt;1.2&amp;lt;/version&amp;gt;&lt;br /&gt;      &amp;lt;scope&amp;gt;system&amp;lt;/scope&amp;gt;&lt;br /&gt;      &amp;lt;systemPath&amp;gt;${javafx.home}/lib/mobile/jsr75_1.0.jar&amp;lt;/systemPath&amp;gt;&lt;br /&gt;    &amp;lt;/dependency&amp;gt;&lt;br /&gt;    &amp;lt;dependency&amp;gt;&lt;br /&gt;      &amp;lt;groupId&amp;gt;junit&amp;lt;/groupId&amp;gt;&lt;br /&gt;      &amp;lt;artifactId&amp;gt;junit&amp;lt;/artifactId&amp;gt;&lt;br /&gt;      &amp;lt;version&amp;gt;3.8.1&amp;lt;/version&amp;gt;&lt;br /&gt;      &amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;&lt;br /&gt;    &amp;lt;/dependency&amp;gt;&lt;br /&gt;  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;  &amp;lt;build&amp;gt;&lt;br /&gt;      &amp;lt;sourceDirectory&amp;gt;src/main/java&amp;lt;/sourceDirectory&amp;gt;&lt;br /&gt;      &amp;lt;plugins&amp;gt;&lt;br /&gt;          &amp;lt;plugin&amp;gt;&lt;br /&gt;              &amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;&lt;br /&gt;              &amp;lt;artifactId&amp;gt;maven-compiler-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;              &amp;lt;configuration&amp;gt;&lt;br /&gt;                  &amp;lt;compilerId&amp;gt;javafxc&amp;lt;/compilerId&amp;gt;&lt;br /&gt;                  &amp;lt;include&amp;gt;**/*.fx&amp;lt;/include&amp;gt;&lt;br /&gt;                  &amp;lt;fork&amp;gt;true&amp;lt;/fork&amp;gt; &amp;lt;!-- NOTE: only “fork” mode supported now --&amp;gt;&lt;br /&gt;              &amp;lt;/configuration&amp;gt;&lt;br /&gt;              &amp;lt;dependencies&amp;gt;&lt;br /&gt;                  &amp;lt;dependency&amp;gt;&lt;br /&gt;                      &amp;lt;groupId&amp;gt;net.sf.m2-javafxc&amp;lt;/groupId&amp;gt; &amp;lt;!-- NOTE: groupdId conforms project domain name, was: net.sf.m2-javafxc --&amp;gt;&lt;br /&gt;                      &amp;lt;artifactId&amp;gt;plexus-compiler-javafxc&amp;lt;/artifactId&amp;gt;&lt;br /&gt;                      &amp;lt;version&amp;gt;0.3&amp;lt;/version&amp;gt; &amp;lt;!-- NOTE: 0.3 is the current version in Maven Central repository --&amp;gt;&lt;br /&gt;                  &amp;lt;/dependency&amp;gt;&lt;br /&gt;              &amp;lt;/dependencies&amp;gt;&lt;br /&gt;          &amp;lt;/plugin&amp;gt;&lt;br /&gt;          &amp;lt;plugin&amp;gt;&lt;br /&gt;              &amp;lt;groupId&amp;gt;org.codehaus.mojo&amp;lt;/groupId&amp;gt;&lt;br /&gt;              &amp;lt;artifactId&amp;gt;exec-maven-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;              &amp;lt;executions&amp;gt;&lt;br /&gt;                  &amp;lt;execution&amp;gt;&lt;br /&gt;                      &amp;lt;phase&amp;gt;package&amp;lt;/phase&amp;gt;&lt;br /&gt;                      &amp;lt;goals&amp;gt;&lt;br /&gt;                          &amp;lt;goal&amp;gt;exec&amp;lt;/goal&amp;gt;&lt;br /&gt;                      &amp;lt;/goals&amp;gt;&lt;br /&gt;                  &amp;lt;/execution&amp;gt;&lt;br /&gt;              &amp;lt;/executions&amp;gt;&lt;br /&gt;          &amp;lt;configuration&amp;gt;&lt;br /&gt;              &amp;lt;executable&amp;gt;/opt/javafx-sdk1.2/bin/javafx&amp;lt;/executable&amp;gt;&lt;br /&gt;              &amp;lt;arguments&amp;gt;&lt;br /&gt;                  &amp;lt;argument&amp;gt;nl.tikal.common.javafxmavenproject.Controls&amp;lt;/argument&amp;gt;&lt;br /&gt;                  &amp;lt;argument&amp;gt;-classpath&amp;lt;/argument&amp;gt;&lt;br /&gt;                  &amp;lt;classpath /&amp;gt;&lt;br /&gt;              &amp;lt;/arguments&amp;gt;&lt;br /&gt;              &amp;lt;/configuration&amp;gt;&lt;br /&gt;          &amp;lt;/plugin&amp;gt;&lt;br /&gt;       &amp;lt;/plugins&amp;gt;&lt;br /&gt;  &amp;lt;/build&amp;gt;&lt;br /&gt;  &amp;lt;/project&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;div style="color: yellow;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3370527929433173283-3106799749105517108?l=andre86blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3370527929433173283/posts/default/3106799749105517108'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3370527929433173283/posts/default/3106799749105517108'/><link rel='alternate' type='text/html' href='http://andre86blog.blogspot.com/2009/11/setting-up-javafx-and-maven2-on-ubuntu.html' title='Setting up JavaFX and Maven2 on Ubuntu'/><author><name>Andre Hogenkamp</name><uri>http://www.blogger.com/profile/10425828227626608950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3370527929433173283.post-2830335456223271415</id><published>2009-11-08T17:08:00.009+01:00</published><updated>2009-11-25T20:26:27.602+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu 9.10'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='virtualbox'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Ubuntu 9.10 virtualbox ose 2.2.4 and guestadditions</title><content type='html'>Installing Ubuntu 9.10 on virtualbox ose 2.2.4is not a problem. Just make a new machine, set Ubuntu 9.10 iso as cd image and install from there.&lt;br /&gt;&lt;br /&gt;Problems arise when trying to install the guest additions. Since Ubuntu 9.10 has a more recent kernel than virtualbox expects, an error occurs&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;error: implicit declaration of function utf8_mbtowc&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;You can find a &lt;a href="http://mateusz.loskot.net/2009/08/22/compilation-of-virtualbox-addins-for-ubuntu-910/"&gt;solution &lt;/a&gt; for this on the net, but for me the easiest solution was to download the guest additions for the newest version (3.0.8) of the &lt;a  href="http://download.virtualbox.org/virtualbox/3.0.8/"&gt;VBoxGuestAdditions&lt;/a&gt;&lt;br /&gt;and install these.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Set VBoxGuestAdditions_3.0.8.iso as cd image in VirtualBox and&lt;br /&gt;&lt;br /&gt;Open a terminal (by pressing ALT-F2) and enter “terminal” on gnome.&lt;br /&gt;cd /media/cdrom&lt;br /&gt;sudo bash ./VBoxLinuxAdditions-x86.run &lt;br /&gt;(the one for your platform, in my case x86)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Now it should compile and install and is finally usable.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3370527929433173283-2830335456223271415?l=andre86blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3370527929433173283/posts/default/2830335456223271415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3370527929433173283/posts/default/2830335456223271415'/><link rel='alternate' type='text/html' href='http://andre86blog.blogspot.com/2009/11/ubuntu-910-virtualbox-ose-224-and.html' title='Ubuntu 9.10 virtualbox ose 2.2.4 and guestadditions'/><author><name>Andre Hogenkamp</name><uri>http://www.blogger.com/profile/10425828227626608950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3370527929433173283.post-567280100555536633</id><published>2009-01-18T13:42:00.009+01:00</published><updated>2009-11-16T12:32:23.980+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javafx'/><category scheme='http://www.blogger.com/atom/ns#' term='golf'/><title type='text'>Golf and JavaFX, part 3</title><content type='html'>The code from the last two parts has been cleaned and the GUI has been prettyfied.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_JkqrGS_uG98/SXMlwczjFjI/AAAAAAAAAEY/FRcJQNHYZx8/s1600-h/Schedule2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 336px;" src="http://2.bp.blogspot.com/_JkqrGS_uG98/SXMlwczjFjI/AAAAAAAAAEY/FRcJQNHYZx8/s400/Schedule2.jpg" alt="" id="BLOGGER_PHOTO_ID_5292615501386815026" border="0"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This new code is available as a &lt;a href="http://sites.google.com/site/tikal86/resources/GolfPlayerPositionChart.zip?attredirects=0"&gt;netbeans project&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Now that a schedule can be displayed , the next challenge is to be able to go to the individual tournaments. Therefore the tournament names need to be links to another JavaFx class, which will be dispayed next to the schedule.&lt;br /&gt;&lt;br /&gt;The most easy way is to make a JavaFX class ScheduleRow which contains not only the text and format, but also the link to the tournamentpage. This then replaces the Group in the for loop in Schedule.fx.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;   public function getSchedule(year:String):Node[] {&lt;br /&gt;       var europeanTour = new EuropeanTour();&lt;br /&gt;       if(tournaments == null) {&lt;br /&gt;           var schedule = europeanTour.getSchedule();&lt;br /&gt;           tournaments = [&lt;br /&gt;                   for (tournament in schedule) {&lt;br /&gt;                       counter++;&lt;br /&gt;                       var yposition  = counter * (tournamentFontSize + tournamentFontSize/2);&lt;br /&gt;                       ScheduleRow {&lt;br /&gt;                           tournament: tournament&lt;br /&gt;                           tournamentFontSize: tournamentFontSize&lt;br /&gt;                           tournamentlink: "link"&lt;br /&gt;                           width:width&lt;br /&gt;                           y: yposition&lt;br /&gt;                          &lt;br /&gt;                       }&lt;br /&gt;                  }&lt;br /&gt;               ];&lt;br /&gt;       } else {&lt;br /&gt;           tournaments = [];&lt;br /&gt;       }&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The new getSchedule() method in Schedule.fx&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;import javafx.scene.CustomNode;&lt;br /&gt;import javafx.scene.Node;&lt;br /&gt;import javafx.scene.Group;&lt;br /&gt;import javafx.scene.shape.Rectangle;&lt;br /&gt;import javafx.scene.text.Text;&lt;br /&gt;import javafx.scene.paint.Color;&lt;br /&gt;import javafx.scene.paint.Stop;&lt;br /&gt;import javafx.scene.text.Font;&lt;br /&gt;import javafx.scene.paint.LinearGradient;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* @author André Hogenkamp&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;public class ScheduleRow extends CustomNode {&lt;br /&gt;&lt;br /&gt;   public var tournamentlink: String;&lt;br /&gt;   public var tournament: String;&lt;br /&gt;   public var tournamentFontSize: Integer;&lt;br /&gt;   public var width: Integer;&lt;br /&gt;   public var y: Integer;&lt;br /&gt;&lt;br /&gt;   function getRow() {&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   override function create() : Node {&lt;br /&gt;       Group {&lt;br /&gt;           content: [&lt;br /&gt;               Rectangle {&lt;br /&gt;                   x: 0&lt;br /&gt;                   y: y&lt;br /&gt;                   width: width&lt;br /&gt;                   height: tournamentFontSize + tournamentFontSize/2&lt;br /&gt;                   fill: LinearGradient {&lt;br /&gt;                       startX: 0.0, startY: 0.0, endX: 0.0, endY: 1.0&lt;br /&gt;                       proportional: true&lt;br /&gt;                       stops: [ Stop { offset: 0.0 color: Color.rgb(40, 40, 40) },&lt;br /&gt;                                Stop { offset: 1.0 color: Color.rgb(30, 30, 30) }&lt;br /&gt;                            ]&lt;br /&gt;                   }&lt;br /&gt;&lt;br /&gt;               }&lt;br /&gt;               Text {&lt;br /&gt;                   content: tournament;&lt;br /&gt;                   fill: Color.LIGHTGREY&lt;br /&gt;                   font: Font {&lt;br /&gt;                       size: tournamentFontSize&lt;br /&gt;                   }&lt;br /&gt;                   x: 5&lt;br /&gt;                   y: y + tournamentFontSize + tournamentFontSize/4&lt;br /&gt;               }&lt;br /&gt;           ]&lt;br /&gt;&lt;br /&gt;       }&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The new class ScheduleRow.fx&lt;br /&gt;&lt;br /&gt;The method getSchedule() in EuropeanTour.java must now return a Java Object rather then a String[] because we need both the name and the link of the tournament. The new java class TournamentLink.java  does this for us.&lt;br /&gt;&lt;br /&gt;The new getValuesforClass() from Parser.java return a List of these Tournamentlink classes.&lt;br /&gt;&lt;br /&gt;The new JavaFX class Tournament can then load this page to read the scores and display the default playerscores, the top10 players.&lt;br /&gt;&lt;br /&gt;This class also let the user choose other views, such as players from a specified nation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3370527929433173283-567280100555536633?l=andre86blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3370527929433173283/posts/default/567280100555536633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3370527929433173283/posts/default/567280100555536633'/><link rel='alternate' type='text/html' href='http://andre86blog.blogspot.com/2009/01/golf-and-javafx-part-3.html' title='Golf and JavaFX, part 3'/><author><name>Andre Hogenkamp</name><uri>http://www.blogger.com/profile/10425828227626608950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_JkqrGS_uG98/SXMlwczjFjI/AAAAAAAAAEY/FRcJQNHYZx8/s72-c/Schedule2.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3370527929433173283.post-1075235651392332323</id><published>2009-01-04T13:16:00.015+01:00</published><updated>2009-11-16T12:31:56.491+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javafx'/><category scheme='http://www.blogger.com/atom/ns#' term='golf'/><title type='text'>Golf and JavaFX, part 2</title><content type='html'>In the &lt;a href="http://andre86blog.blogspot.com/2008/12/golf-and-javafx-part-1.html"&gt;first part&lt;/a&gt; of this series an chart was made to show a graph on a grid. &lt;br /&gt;&lt;br /&gt;In this part the content for the page is extracted from the page &lt;a href="http://www.europeantour.com/"&gt;www.europeantour.com.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Before the tournament data (which we eventually want) can be fetched, first the schedule of a year is fetched from the homepage. JavaFX does have a class for getting http requests, but doesnt have one for the parsing of html, so the &lt;a href="http://htmlparser.sourceforge.net/"&gt;htmlparser&lt;/a&gt; was used. In the end it was easier to do all the html work in Java and only the presentation in JavaFX.&lt;br /&gt;&lt;br /&gt;A method that uses an xpath expression, a tagvalue and an attributename does the work of getting the url for the schedule page. The xpathexpression was used as a more general way of specifying which element would be needed, but in the end only the element name is used.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;    /**&lt;br /&gt;     * Returns the value of the requested attribute of the requested node.&lt;br /&gt;     * &lt;br /&gt;     * @param xpath         The xPath expression to the requested node, including the nodename.&lt;br /&gt;     * @param tagvalue      The value of the requested node.&lt;br /&gt;     * @param attributeName The attributename of the requested attribute of the requested node.&lt;br /&gt;     * @return              The value of the requested attribute of the requested node.&lt;br /&gt;     * @throws javax.swing.text.BadLocationException&lt;br /&gt;     */&lt;br /&gt;    public String getAttributeValue(String xpath, String tagvalue, String attributeName) throws BadLocationException {&lt;br /&gt;        String attributeValue = null;&lt;br /&gt;        try {&lt;br /&gt;            NodeList list = new NodeList ();&lt;br /&gt;            String tagName = xpath.substring(xpath.lastIndexOf("/") + 1);&lt;br /&gt;//            System.out.println("tagName = " + tagName);&lt;br /&gt;            NodeFilter filter = new AndFilter(new NodeFilter[] {&lt;br /&gt;                    new TagNameFilter(tagName),&lt;br /&gt;                    new HasChildFilter(new RegexFilter(tagvalue, RegexFilter.MATCH)),&lt;br /&gt;                    new HasAttributeFilter(attributeName)&lt;br /&gt;            });&lt;br /&gt;            for (NodeIterator e = parser.elements (); e.hasMoreNodes ();) {&lt;br /&gt;                 e.nextNode ().collectInto (list, filter);&lt;br /&gt;            }&lt;br /&gt;//            System.out.println("list size = " + list.size());&lt;br /&gt;            if(list.size() &gt; 0) {&lt;br /&gt;                TagNode node = (TagNode)list.elementAt(0);&lt;br /&gt;                attributeValue =  node.getAttribute(attributeName);&lt;br /&gt;            }&lt;br /&gt;        } catch(ParserException px) {&lt;br /&gt;            throw new BadLocationException(xpath, 0);&lt;br /&gt;        }&lt;br /&gt;        return attributeValue;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The AndFilter does all the hard work for us, it is a nice way of finding the right element. From that we get the value of the 'href' attribute.&lt;br /&gt;&lt;br /&gt;The fetching of the schedule (list of tournaments) is mostly the same. Except that a list is needed and that it must be from a childelement of the elements we look for (A 'TD' element with css class 'tournNameCell' and child element 'a' which contains the name of the tournament)&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;   /**&lt;br /&gt;    * Gets a list of values for all elements that have the css class type given and a child element&lt;br /&gt;    * with the specified name. The value is taken from the child element.&lt;br /&gt;    *&lt;br /&gt;    * @param xpath&lt;br /&gt;    * @param classvalue&lt;br /&gt;    * @param childElementName&lt;br /&gt;    * @return&lt;br /&gt;    * @throws javax.swing.text.BadLocationException&lt;br /&gt;    */&lt;br /&gt;   public List getElementValuesForClass(String xpath, String classvalue, String childElementName) throws BadLocationException {&lt;br /&gt;       List tournamentNames = new ArrayList();&lt;br /&gt;       try {&lt;br /&gt;           NodeList list = new NodeList ();&lt;br /&gt;           String tagName = xpath.substring(xpath.lastIndexOf("/") + 1);&lt;br /&gt;//            System.out.println("tagName = " + tagName);&lt;br /&gt;           NodeFilter filter = new AndFilter(new NodeFilter[] {&lt;br /&gt;                   new TagNameFilter(tagName),&lt;br /&gt;                   new HasAttributeFilter("class", classvalue)&lt;br /&gt;           });&lt;br /&gt;           for (NodeIterator e = parser.elements (); e.hasMoreNodes ();) {&lt;br /&gt;                e.nextNode ().collectInto (list, filter);&lt;br /&gt;           }&lt;br /&gt;//            System.out.println("list size = " + list.size());&lt;br /&gt;           for (int i = 0; i &amp;lt; list.size(); i=i+2) {&lt;br /&gt;               TagNode node = (TagNode)list.elementAt(i);&lt;br /&gt;               NodeList childList = new NodeList();&lt;br /&gt;               NodeFilter childFilter = new TagNameFilter(childElementName);&lt;br /&gt;               for (NodeIterator e = node.getChildren().elements(); e.hasMoreNodes();) {&lt;br /&gt;                     e.nextNode().collectInto(childList, childFilter);&lt;br /&gt;               }&lt;br /&gt;               TagNode childNode = (TagNode)childList.elementAt(0);&lt;br /&gt;               String tournamentLink = childNode.getText();&lt;br /&gt;               NodeList textChildList = new NodeList();&lt;br /&gt;               NodeFilter textChildFilter = new NodeClassFilter(TextNode.class);&lt;br /&gt;               for (NodeIterator e = childNode.getChildren().elements(); e.hasMoreNodes();) {&lt;br /&gt;                     e.nextNode().collectInto(textChildList, textChildFilter);&lt;br /&gt;               }&lt;br /&gt;               String tournamentName = textChildList.elementAt(0).getText();&lt;br /&gt;               tournamentNames.add(tournamentName);&lt;br /&gt;//            System.out.println("list item = " + tournamentName);&lt;br /&gt;           }&lt;br /&gt;       } catch(ParserException px) {&lt;br /&gt;           throw new BadLocationException(xpath, 0);&lt;br /&gt;       }&lt;br /&gt;       return tournamentNames;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The method in the EuropeanTour class puts it all together.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;import java.util.ArrayList;&lt;br /&gt;import java.util.List;&lt;br /&gt;import java.util.logging.Level;&lt;br /&gt;import java.util.logging.Logger;&lt;br /&gt;import javax.swing.text.BadLocationException;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; *&lt;br /&gt; * @author André Hogenkamp&lt;br /&gt; */&lt;br /&gt;public class EuropeanTour {&lt;br /&gt;    private static final String EUROPEANTOUR_URL = "http://www.europeantour.com/";&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * returns a schedule from the european tour as a String array.&lt;br /&gt;     * &lt;br /&gt;     * @return&lt;br /&gt;     */&lt;br /&gt;    public String[] getSchedule() {&lt;br /&gt;        List schedule = new ArrayList();&lt;br /&gt;        try {&lt;br /&gt;            HtmlParser parser = new HtmlParser(EUROPEANTOUR_URL);&lt;br /&gt;            parser.parse();&lt;br /&gt;            String scheduleUrl = parser.getAttributeValue("/html/body/table[1]/tr[2]/td/ul/li[6]/ul/li[4]/a", "Schedule", "href");&lt;br /&gt;//            System.out.println("scheduleUrl:" + scheduleUrl);&lt;br /&gt;            if(scheduleUrl != null) {&lt;br /&gt;                parser = new HtmlParser(scheduleUrl);&lt;br /&gt;                parser.parse();&lt;br /&gt;                schedule = parser.getElementValuesForClass("/html/body/table/tr[4]/td/table/tr/td[2]/table/tr/td/div/div/table/tr/td", "tournNameCell", "a");&lt;br /&gt;//                System.out.println("schedule length:" + schedule.size());&lt;br /&gt;            }&lt;br /&gt;        } catch (IOException ex) {&lt;br /&gt;            Logger.getLogger(HtmlParser.class.getName()).log(Level.SEVERE, null, ex);&lt;br /&gt;        } catch (BadLocationException blx) {&lt;br /&gt;            Logger.getLogger(HtmlParser.class.getName()).log(Level.SEVERE, null, blx);&lt;br /&gt;        }&lt;br /&gt;        String[] scheduleArray = new String[schedule.size()];&lt;br /&gt;        return (String[]) schedule.toArray(scheduleArray);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Now the presentation part.&lt;br /&gt;&lt;br /&gt;The main page is just a simple one for now. It shows a list of years (the idea is to get the schedule for that year, but i don't know if that wil work, since the europeantour page does not have that functionality :-( ) and the schedule for that year (2009 for now)&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;import javafx.stage.Stage;&lt;br /&gt;import javafx.scene.Scene;&lt;br /&gt;import javafx.scene.text.Text;&lt;br /&gt;import javafx.scene.text.Font;&lt;br /&gt;import javafx.scene.text.FontWeight;&lt;br /&gt;import javafx.scene.layout.VBox;&lt;br /&gt;import javafx.scene.layout.HBox;&lt;br /&gt;import javafx.scene.paint.Color;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* @author André Hogenkamp&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;var schedule = Schedule {&lt;br /&gt;            year: "2009";&lt;br /&gt;                };&lt;br /&gt;&lt;br /&gt;Stage {&lt;br /&gt;title: "Golf scores"&lt;br /&gt;width: 500&lt;br /&gt;height: 800&lt;br /&gt;scene: Scene {&lt;br /&gt;fill: Color.BLACK&lt;br /&gt;content:&lt;br /&gt;[&lt;br /&gt;    VBox {&lt;br /&gt;        spacing: 5&lt;br /&gt;        content:&lt;br /&gt;        [&lt;br /&gt;            Text {&lt;br /&gt;                content: "2009 2008"&lt;br /&gt;                fill: Color.WHITE&lt;br /&gt;                font: Font.font("Helvetica", FontWeight.BOLD, 16)&lt;br /&gt;                y: 16&lt;br /&gt;            }&lt;br /&gt;            HBox {&lt;br /&gt;                spacing: 5&lt;br /&gt;                translateY: 50&lt;br /&gt;                content: [&lt;br /&gt;                    schedule&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;&lt;br /&gt;&lt;br /&gt;The VBox and HBox should space the containing nodes, but this does not seem to work. Maybe the used custom nodes are not complete yet.&lt;br /&gt;The schedule class formats the schedule for printing on the screen. A Text node with 'Schedule' and the year followed by the list of tournaments. Content was a Text[] since the tournamet list contains only Text nodes, but was changed to a Node[] to make a group of the Text nodes and be able to change tre position.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;import javafx.scene.CustomNode;&lt;br /&gt;import javafx.scene.Node;&lt;br /&gt;import javafx.scene.text.Text;&lt;br /&gt;import javafx.scene.Group;&lt;br /&gt;import javafx.scene.paint.Color;&lt;br /&gt;import javafx.scene.text.Font;&lt;br /&gt;import javafx.scene.text.FontWeight;&lt;br /&gt;import nl.tikal.sport.golf.net.EuropeanTourFx;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* @author André Hogenkamp&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;public class Schedule extends CustomNode {&lt;br /&gt;public var year: String = "2009";&lt;br /&gt;&lt;br /&gt;var content: Node[];&lt;br /&gt;&lt;br /&gt;def tour: EuropeanTourFx = EuropeanTourFx {&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* The grid contains lines to form a grid.&lt;br /&gt;*/&lt;br /&gt;var schedule : Group = Group {&lt;br /&gt;content: bind [&lt;br /&gt;    Text {&lt;br /&gt;        content: "Schedule {year}"&lt;br /&gt;        fill: Color.WHITE&lt;br /&gt;        font: Font.font("Helvetica", FontWeight.BOLD, 16)&lt;br /&gt;    }&lt;br /&gt;    Group {&lt;br /&gt;        content: content&lt;br /&gt;        translateY: 20&lt;br /&gt;    }&lt;br /&gt;]&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public function getSchedule(year:String):Node[] {&lt;br /&gt;content = tour.getTournaments();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;override function create() : Node {&lt;br /&gt;getSchedule(year);&lt;br /&gt;schedule;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The list is filled from the EuropeanTourFx.getTournaments() method, which get its information from the java class EuropeanTour.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;import javafx.scene.text.Text;&lt;br /&gt;import javafx.scene.paint.Color;&lt;br /&gt;import javafx.scene.text.Font;&lt;br /&gt;import java.lang.System;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* @author André Hogenkamp&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;public class EuropeanTourFx {&lt;br /&gt;&lt;br /&gt;var tournaments: Text[];&lt;br /&gt;var fontSize = 12;&lt;br /&gt;var counter = -1;&lt;br /&gt;&lt;br /&gt;public function getTournaments() :Text[] {&lt;br /&gt;var europeanTour = new EuropeanTour();&lt;br /&gt;if(tournaments == null) {&lt;br /&gt;    var schedule = europeanTour.getSchedule();&lt;br /&gt;    tournaments = [&lt;br /&gt;            for (tournament in schedule) {&lt;br /&gt;                counter++;&lt;br /&gt;                Text {&lt;br /&gt;                    content: tournament;&lt;br /&gt;                    fill: Color.YELLOW&lt;br /&gt;                    font: Font {&lt;br /&gt;                        size: fontSize&lt;br /&gt;                    }&lt;br /&gt;                    y: counter * fontSize&lt;br /&gt;                };&lt;br /&gt;            }&lt;br /&gt;        ];&lt;br /&gt;} else {&lt;br /&gt;    tournaments = [];&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The for loop returns the last element therefore the counter++ is the first expression and the counter is initialised at -1.&lt;br /&gt;&lt;br /&gt;When run it looks like&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_JkqrGS_uG98/SWC4VntD5NI/AAAAAAAAAEQ/fob4Rn_k6rQ/s1600-h/Schedule.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 192px; height: 400px;" src="http://4.bp.blogspot.com/_JkqrGS_uG98/SWC4VntD5NI/AAAAAAAAAEQ/fob4Rn_k6rQ/s400/Schedule.jpg" alt="" id="BLOGGER_PHOTO_ID_5287428644107707602" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It is still basic, but it does what it should do.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3370527929433173283-1075235651392332323?l=andre86blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3370527929433173283/posts/default/1075235651392332323'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3370527929433173283/posts/default/1075235651392332323'/><link rel='alternate' type='text/html' href='http://andre86blog.blogspot.com/2009/01/golf-and-javafx-part-2.html' title='Golf and JavaFX, part 2'/><author><name>Andre Hogenkamp</name><uri>http://www.blogger.com/profile/10425828227626608950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_JkqrGS_uG98/SWC4VntD5NI/AAAAAAAAAEQ/fob4Rn_k6rQ/s72-c/Schedule.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3370527929433173283.post-8261432130208200193</id><published>2008-12-17T19:35:00.027+01:00</published><updated>2009-11-16T12:31:31.534+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javafx'/><category scheme='http://www.blogger.com/atom/ns#' term='golf'/><title type='text'>Golf and JavaFX, part 1</title><content type='html'>Since i am both a fan of golf and JavaFX, it would be nice to combine both.&lt;br /&gt;&lt;br /&gt;One thing that i think is missing from the scoreboards on the european tour (or race to dubai as it's now called) is a trace of the position of the players. Yes you can see their current position and thier starting position, but not how they got there.&lt;br /&gt;&lt;br /&gt;So let's make a chart that tracks those positions.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The goal&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We will start with a drawing of how the endresult will  look like.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_JkqrGS_uG98/SVdSMf12DjI/AAAAAAAAAEI/9bAsjePl42A/s1600-h/Chart.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 263px; height: 265px;" src="http://1.bp.blogspot.com/_JkqrGS_uG98/SVdSMf12DjI/AAAAAAAAAEI/9bAsjePl42A/s400/Chart.jpg" alt="" id="BLOGGER_PHOTO_ID_5284783062401814066" border="0" /&gt;&lt;/a&gt;Just a simple grid with two lines.&lt;br /&gt;&lt;br /&gt;I can think of more to put in, but for now this will do.&lt;br /&gt;&lt;br /&gt;Since we need a line chart, we'll start with that.&lt;br /&gt;A line chart is a combination of a grid and a line graph.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;First the grid&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The variables for a grid are the number of lines (both vertical and horizontal) and their color and the size of the grid. So these were made public vars.&lt;br /&gt;&lt;br /&gt;We want the lines to be neatly spaced out over the whole width and height, so we compute them by dividing the width with the nnumber of horizontal lines. The sequence xcoords than stores these horizontal coordinates. The sequence ycoords than does the same for the vertical coordinates. The sequences xcoordindex and ycoordindex are used for navigating through the *coords sequences.&lt;br /&gt;&lt;br /&gt;The var grid defines the Group with the lines and the create() function creates the Grid node.&lt;br /&gt;&lt;pre&gt;&lt;code class="java"&gt;&lt;br /&gt;/*&lt;br /&gt;* Grid.fx&lt;br /&gt;*&lt;br /&gt;* Created on Dec 16, 2008, 9:42:15 PM&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;package nl.tikal.javafx.scene.chart;&lt;br /&gt;&lt;br /&gt;import javafx.scene.paint.Color;&lt;br /&gt;import javafx.scene.CustomNode;&lt;br /&gt;import javafx.scene.Group;&lt;br /&gt;import javafx.scene.Node;&lt;br /&gt;import javafx.scene.shape.Line;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* @author André Hogenkamp&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;public class Grid extends CustomNode {&lt;br /&gt;public var stroke: Color;&lt;br /&gt;public var width: Number;&lt;br /&gt;public var height: Number;&lt;br /&gt;public var horizontallines: Integer;&lt;br /&gt;public var verticallines: Integer;&lt;br /&gt;&lt;br /&gt;public def xcoords = [0..width step width/horizontallines];&lt;br /&gt;public def ycoords = [0..height step height/verticallines];&lt;br /&gt;def xcoordindex = [0..horizontallines];&lt;br /&gt;def ycoordindex = [0..verticallines];&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* The grid contains lines to form a grid.&lt;br /&gt;*/&lt;br /&gt;def grid : Group = Group {&lt;br /&gt;content: [&lt;br /&gt;   for (x in xcoordindex) {&lt;br /&gt;       Line {&lt;br /&gt;           stroke: stroke&lt;br /&gt;           startX: 0&lt;br /&gt;           startY: ycoords[x]&lt;br /&gt;           endX: width&lt;br /&gt;           endY: ycoords[x]&lt;br /&gt;       }&lt;br /&gt;   }&lt;br /&gt;   for (y in ycoordindex) {&lt;br /&gt;       Line {&lt;br /&gt;           stroke: stroke&lt;br /&gt;           startX: xcoords[y]&lt;br /&gt;           startY: 0&lt;br /&gt;           endX: xcoords[y]&lt;br /&gt;           endY: height&lt;br /&gt;       }&lt;br /&gt;   }&lt;br /&gt;]&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;override function create() : Node {&lt;br /&gt;grid&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;span style="font-weight: bold;"&gt;Next the linegraphs.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The variables for a linegraph are the stroke color and width, the size of the linegraph and the point that make up the linegraph. So these were made public vars again. Most of the code is the same as for the grid, except of course that this draws a line instead of a grid ;-)&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code class="java"&gt;&lt;br /&gt;/*&lt;br /&gt; * LineGraph.fx&lt;br /&gt; *&lt;br /&gt; * Created on Dec 16, 2008, 10:29:08 PM&lt;br /&gt; */&lt;br /&gt;&lt;br /&gt;package nl.tikal.javafx.scene.chart;&lt;br /&gt;&lt;br /&gt;import javafx.scene.CustomNode;&lt;br /&gt;import javafx.scene.Node;&lt;br /&gt;import javafx.scene.paint.Color;&lt;br /&gt;import javafx.scene.Group;&lt;br /&gt;import javafx.scene.shape.Line;&lt;br /&gt;import javafx.scene.shape.LineTo;&lt;br /&gt;import javafx.scene.shape.Path;&lt;br /&gt;import javafx.scene.shape.MoveTo;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * @author André Hogenkamp&lt;br /&gt; */&lt;br /&gt;&lt;br /&gt;public class LineGraph extends CustomNode {&lt;br /&gt;    public var strokeColor: Color;&lt;br /&gt;    public var strokeWidth: Integer;&lt;br /&gt;    public var width: Number;&lt;br /&gt;    public var height: Number;&lt;br /&gt;    public var horizontallines: Integer;&lt;br /&gt;    public var verticallines: Integer;&lt;br /&gt;    public var linepoints: GridPoint[];&lt;br /&gt;&lt;br /&gt;    public def xcoords = [0..width step width/horizontallines];&lt;br /&gt;    public def ycoords = [0..height step height/verticallines];&lt;br /&gt;    def reversedycoords = reverse ycoords;&lt;br /&gt;    def coordindex = [0..verticallines - 1];&lt;br /&gt;    var point1 = linepoints[0];&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * The lineGraph contains a path to form a graph.&lt;br /&gt;     */&lt;br /&gt;    def lineGraph : Group = Group {&lt;br /&gt;        content: [&lt;br /&gt;            Path {&lt;br /&gt;                stroke: strokeColor&lt;br /&gt;                strokeWidth: strokeWidth&lt;br /&gt;                elements: [&lt;br /&gt;                    MoveTo {x: xcoords[point1.x] y: reversedycoords[point1.y]}&lt;br /&gt;                    for (x in coordindex) {&lt;br /&gt;                        var point = linepoints[x];&lt;br /&gt;                        LineTo {x: xcoords[point.x] y: reversedycoords[point.y]}&lt;br /&gt;                    }&lt;br /&gt;                ]&lt;br /&gt;            }&lt;br /&gt;        ]&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    override function create() : Node {&lt;br /&gt;        lineGraph&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;For a complete lineChart we combine the grid and the linegraph. A lineChart can contain more than one linegraph, so this variable is a sequence of lineGraphs. There is also a variable to show or hide the grid.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code class="java"&gt;&lt;br /&gt;/*&lt;br /&gt; * LineChart.fx&lt;br /&gt; *&lt;br /&gt; * Created on Dec 17, 2008, 8:25:31 PM&lt;br /&gt; */&lt;br /&gt;&lt;br /&gt;package nl.tikal.javafx.scene.chart;&lt;br /&gt;&lt;br /&gt;import javafx.scene.CustomNode;&lt;br /&gt;import javafx.scene.Node;&lt;br /&gt;import javafx.scene.Group;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * @author André Hogenkamp&lt;br /&gt; */&lt;br /&gt;&lt;br /&gt;public class LineChart extends CustomNode {&lt;br /&gt;&lt;br /&gt;    public var grid: Grid;&lt;br /&gt;    public var showGrid: Boolean;&lt;br /&gt;    public var lineGraphs: LineGraph[];&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * The grid contains lines to form a grid.&lt;br /&gt;     */&lt;br /&gt;    def lineChart : Group = Group {&lt;br /&gt;        content: [&lt;br /&gt;            grid, lineGraphs&lt;br /&gt;        ]&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    override function create() : Node {&lt;br /&gt;        lineChart&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;So far for this first part. In the next part the pagedata is read from the htmlpage.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3370527929433173283-8261432130208200193?l=andre86blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3370527929433173283/posts/default/8261432130208200193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3370527929433173283/posts/default/8261432130208200193'/><link rel='alternate' type='text/html' href='http://andre86blog.blogspot.com/2008/12/golf-and-javafx-part-1.html' title='Golf and JavaFX, part 1'/><author><name>Andre Hogenkamp</name><uri>http://www.blogger.com/profile/10425828227626608950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_JkqrGS_uG98/SVdSMf12DjI/AAAAAAAAAEI/9bAsjePl42A/s72-c/Chart.jpg' height='72' width='72'/></entry></feed>
