So it’s been about 2 weeks ago when a JavaFX beta was released to the public and I could not resist to bring up some Windows and give it a try.
First of all I’m quite impressed on the features it gives me compared to what I know from SWT and Swing. I can control almost L&F stuff using CSS.
The first thing I did naturally was to get Eclipse Databinding integrated so that I was able to bing my EMF-Objects to it (took me half a day to implement a Value-Property-Binding) and so I can now write code like this:
// ... private void createControls() { // ... { Label l = new Label("Firstname"); rootPane.add(l, 0, 0); w_firstName = new TextBox(); GridPane.setHgrow(w_firstName, Priority.ALWAYS); rootPane.add(w_firstName, 1, 0); } // ... } private void bindControls() { IValueProperty tProp = JFXBeanProperties.value("text"); { IEMFValueProperty mProp = EMFProperties .value(AddressbookPackage.Literals.PERSON__FIRSTNAME); dbc.bindValue(tProp.observe(w_firstName), mProp.observeDetail(master)); } // ... }
I know JFX comes with its own binding solution but JFX-Folks do you really think I’ll clutter my Domain-Model with your custom observable system (or did I get this wrong), what if i want to reuse it in areas no JFX is available? Anyways Eclipse Databinding works like a charme and so I don’t care about their custom JFX-Solution when I have to bind my model-instances.
What I really really like and always hoped we could do also with SWT in Eclipse 4.x is to theme an application as much as I want. Now JavaFX gives me (or better the graphic artist) this freedom.
So this is the UI I’ve written without CSS:
And with some CSS (you know I’m not a graphic artist):
If you already read some of my blog entries the UI you see here should be quite familiar to you because there’s also a Swing and SWT version available.
Naturally the application you see above is not simply a JavaFX application it mixes various Eclipse Technologies into it:
- Equinox
- Eclipse Databinding
- EMF + EMF-Databinding + EMF-Edit
Naturally I’ve hit some road blocks with JavaFX:
- Loading stylesheets is only possible through the global-classpath and filesystem but not if you are in an OSGi-Env – I worked around this using Buddy-Classloading
- Application-Lifecycle-Handling: This is a know bug and I had work around it by registering a Shutdown-Hook
- Rendering artefacts (at least on my Virtual-Windows7 Desktop) when resizing, …
But beside that I have to say that I’m quite impressed by what I see and I think JavaFX 2.0 has found a new follower when it comes to writing UIs. This makes me a bit sorry about SWT because compared to what JavaFX provides to me SWT is light years behind.
Hi Tom,
nice work is it possible to download your examples you use during the blogs about Eclipse SWT, Swing and JavaFX?
Regards
Hi, most sources are available from:
Hi maybe I’m a little bit blind but I can’t find the projects (swing,javafx) on your gitHub and also I can’t find any SVN/CVS links.
The Swing/JavaFX stuff is found in the emf-databinding tutorial as you notice JavaFX is not the only thing I’m experimenting – Qt is another one, ….
Thanks
@Brandi: Because it looks like you are from Vienna there’s going to be a Demo camp end of next week in Vienna
@Tom: Thanks for the hint.
Pingback: Using Xtext to create JavaFX-CSS Editor | Tomsondev Blog
Pingback: Java desktop links of the week, June 13 | Jonathan Giles
It would be nice to get an e4 renderer available as well. I think that if javafx did not have data binding built in (and I would like to see it taken to the extreme where it provides not only some basic config as well as deep support for a majority of use cases with significantly easier coding e.g. WPF level) it could not be taken seriously as a UI framework.
ad e4 render: The example shown here is the start of such a e4 renderer
ad Databinding: As outlined – Eclipse Databinding fills the gap and as outlined too there is a binding mechanism in JavaFX builtin the problem with it is that it is invasive on your domain model which is a no go for me but now with Eclipse Databinding available this isn’t a show stopper for me
I took a look at the code, it looks like you pull in swing components as part of the javafx renderer. Is that correct?
Also, I am surprised that you have to write/copy a new E4Application for this. I thought the renderer was pluggable through services or some registry entry.
How do you handle the OSGi aspect of the jar file and dlls that are part of the beta release directory model. Are you making an OSGi plugin in your workspace where you dump the beta files into?
ad Swing) no i don’t where do you see me doing this?
ad E4Application) yes and this was always designed like this. The reason is that the bootstrap that has to happen at the start of an application is very widget toolkit specifc, even the application definition for equinox e.g. the starting thread might differ. One could think about pulling out some widget-toolkit neutral stuff if you looked closely at the bundle name you could have infered already that this is working as designed
ad) JavaFX for OSGi: I tried 2 possibilities:
a) Using a system.bundle (=using it like stuff coming from rt.jar) but that fails because of the current inability javafx to load css stylesheets and resources from a bundle-url (see RT-14110 and RT-14177)
b) Because of a) failing I had to repackage javafx as OSGi-Bundle and use equinox’ buddy class loading features
ad dlls: The dlls are refered currently through -Djava.libary.path but I guess I could have used the native bundle header as well but I have not tried that yet – I really hope I can get javafx people understand fix the problems when running in OSGi so it was enough for me to get it running as is
I think it was in the address application, there was an import for the swing layouts. I think the javafx basic renderers/binding libraries were clean. Nothing to worry about.
I’ll throw a script together to create the OSGi bundle separately.
Interesting , when this get completed are you intend to share the code ?
yes all of the code presented is already available on my github repo
The UI in the picture (the dark one) is written only with JavaFX and CSS with no swing ? Am I right ?
Sorry, I am new in eclipse and Git-hub stuff and I cant find the fx and css files for the shown UI (Dark one). I will try to port this project for netbeans and I would like you show me the project the contains the files with no swing stuff , only JavaFX and CSS.
Thank you for your attention.
a) Yes the dark one is written JavaFX, CSS and some other Eclipse Technologies (Equinox, Eclipse 4 Application Platform (EAP), EMF, Eclipse Databinding).
The interesting modules are:
b) What do you mean by porting to netbeans. Do only want to compile and work on it with netbeans or do you want to leverage the netbeans platform which means you’d want to replace the EAP through netbeans
I will need something like that in my project than, I will try compile and work on it but, if it posssible , replace the current module and effects with native JavaFX APIs. Is it possible ?
Thank you for your attention.
I’m not sure what you mean by native JavaFX APIs. All you see there is “native” JavaFX. I’m still not sure what you are trying todo and getting this to compile outside Eclipse 4.1 might give bigger headaches you can imagine though it is doable naturally.
Pingback: JavaFX links of the week, June 13 // JavaFX News, Demos and Insight // FX Experience
Hi
i’m not sure this is a place to make my request but i hope someone will help me
i’m tring for severals day now to convert this javafx1.3 code to javafx 2.0
http://blogs.oracle.com/rakeshmenonp/entry/javafx_image_viewer
can someone please help me to convert it?
thanks
You’d better ask the JavaFX developer forum