JavaFX 2.0 bubblemark

  • Post category:JavajavafxUI

Oracle has released the revamped JavaFX 2.0 on JavaOne 2011. It’s an interesting step which immediately invokes many questions. What is the target audience for JavaFX? Which technology segment does it aim at? What are the chances it will actually claim a piece of that segment? Is it any good at the segment it is aiming at? Only the future will tell the answers to all the questions. But some can be attempted to be answered today.

First of all a short summary of what I believe JavaFX 2.0 is: JavaFX attempts to be a higher performance graphics framework, with a UI layer on top, able to display different types of media.

  • “Higher” means that it is not aiming at high end gaming (for example the recently released Battlefield 3 and Call of Duty Modern Warfare 3), but more at the level of platform games like Mario Bros or the fancier and animated user interfaces that some applications have lately.
  • “Graphics framework” indicates that it is not a UI library in its core (like Swing or SWT), but its designed primarily for drawing, manipulating and animating shapes like circles, rectangles and lines.
  • “UI layer on top” to note that it does come with a good set of UI controls, that are drawn using the graphics framework and thus can easily be made “fancy”.
  • “able to display different types of media” means that there is support for playing audio or video streams.

This kind of framework is commonly known as a RIA, or rich internet application, framework.

Having established the technical intention of JavaFX, the first step would be to see if it is any good at what it’s trying to be. This means bringing out the tame racing driver, aka a common frame of reference. For benchmarking a RIA the unofficial first thing to do is throw the bubblemark test at it. (more…)

Continue ReadingJavaFX 2.0 bubblemark

Oracle vs Google

The latest news about the infringement dance Google and Oracle are doing, indicates that Google may be in serious trouble. These law suites usually are far-from-my-bed things which are taken note of, wondered about, and swapped out for day to day activities. But, for some reason, this morning I woke up early and felt angry. Very angry even. And it was aimed at Oracle.

I’ve coded Java since version 1.1. The last 10+ years of my professional life have been about Java. I’ve spent many of my spare time learning, fine tuning, enhancing my Java skills; I’ve tried to contribute as a compensation for making my work possible; even this week I’ve spent precious family time on JavaFX (JFXtras). I never believed that Java was dead. No language was able to pull me away; no Jython, Scala, Haskell or Groovy, no C# or mono. Oh, I’ve examined them all, but they just confirmed that Java is a good and solid choice for the years to come.

But this morning, for the first time, I wondered that if Oracle would use Java to really hurt Google (considering the amount of money they’re suing for, that is a real possible scenario). If Oracle would abuse their stewardship of Java to really hurt one of the biggest contributors to the Java ecosystem. If this law suite turns out to be more than just a slap on the wrist to make clear who’s boss. If Oracle loses the benefit of the doubt, if I then still would be willing to invest my private time in a community with such a leader. With such risk of innovation being slammed down by legislation… Oracle may be able to accomplish what nothing could before; kill my Java community spirit. (more…)

Continue ReadingOracle vs Google

JavaFX 2.0, Swing 2.0?

At the beginning of my previous post I mentioned that I was stuck in the implementation of the calendar picker, because I was using one listener for 42 ToggleButtons, and I could not find out which of the 42 ToggleButtons was actually clicked. The code I have looks like this:

class Skin
{
	/**
	 * create the skin by using other controls
	 */
	private void createNodes()
	{
		for (int i = 0; i < 6 * 7; i++)
		{
			ToggleButton lToggleButton = new ToggleButton();
			lToggleButton.selectedProperty().addListener( iSelectedListener );
			...
		}
	}

	// one listener for all 42 buttons
	final private InvalidationListener<Boolean> iSelectedListener = new InvalidationListener<Boolean>()
	{
		@Override public void invalidated(ObservableValue<? extends Boolean> observableValue)
		{
			// selected or deselected
			boolean lSelected = observableValue.getValue();

			// TODO: which ToggleButton was pressed?
		}
	}
}

After having dropped this at the JavaFX people I went into pause, assuming the InvalidationListener API would be extended to include the origin of the event (like Swing events do). After some time Richard Bair came back to me and explained that extending the API with a reference to the bean would mean additional bytes for each property. My initial reaction was; so??? It’s just a few bytes? But then I realized that JavaFX is not about controls, but about graphics; controls are just a subset in which I’m very interested, but the real focus of JavaFX is much more basic and raw. There will be applications with thousands of nodes, and then a few bytes per property quickly become megabytes and the rise of the mobile devices suddenly make memory important again. So it became clear that extending the InvalidationListener API is not wise indeed. (more…)

Continue ReadingJavaFX 2.0, Swing 2.0?

JavaFX 2.0 EA binding

After Swing, JavaFX 1.x and the iPad, now JavaFX 2.0 is candidate for the calendar picker shake down. Using MigLayout I’ve setup the basic day picking logic, but currently am stuck in build b21, because the events on the selected property in ToggleButton do not tell me which togglebutton was actually pressed, which is quite handy if you have 42 of them on screen. So I decided to focus a bit on binding instead.

My binding experience comes from JGoodies used in connecting Swing components to business model bean properties, usually using JGoodies’ BeanAdapter (which takes away the need to rebind every single property when the business model bean is changed underneath a Swing screen). Since I’m primary focussed on JavaFX’s controls at the moment, I wanted to see if I could bind my calendar picker to a business model. I’m also going to assume future 2.0 in which the properties on the business model also are using JavaFX properties. So I constructed a dummy business model with one property:

	class BusinessModelBean
	{
		final public ObjectProperty iCalendarObjectProperty= new ObjectProperty();
	}

(more…)

Continue ReadingJavaFX 2.0 EA binding

JavaFX 2.0 EA and MigLayout

  • Post category:JavajavafxUI

Oracle rebooted JavaFX and finally positioned it as what I for a long time have been longing for; Swing 2.0. Let’s not kid ourselves; JavaFX is a new UI library for Java, using the API lessons learned from Swing and taking it to the next level with animations and effects. The concept is powerful enough to even go into the 3rd dimension soon. And more importantly; JavaFX2 finally has a good integration (and therefor migration path) with Swing, so it actually has an existing user base which can easily be persuaded to take a peek. Not to mention the fact that it now uses Java instead of JavaFX script, so the EDI support is great right from the start. (Well done Oracle!) But if this doesn’t sound like Swing 2.0, I don’t know what will.

So what is JavaFX2 like? Well… I like it. The API is clean and intuitive. Since it uses a different approach, making everything from simple lines to complete tables just a node in a tree, it means that I still have to really get my head around that. Fact remains that this approach allows to easily add effects and animation on anything, being it on a square or complete screen (they’re all just nodes after all). But I know I will initially use JavaFX in existing Swing applications, so my primary interest is in the controls. In order to make my life easier, I decided that porting MigLayout could be a good idea.

I must say that the initial results in my opinion are not bad at all. Below is an example of a simple test involving a TextBox and Rectangle:

public class MigPaneTest1 extends Application {

    public static void main(String[] args) {
        Launcher.launch(MigPane.class, args);
    }

	@Override
	public void start(Stage stage) {

        // root
        MigPane lRoot = new MigPane(new LC(), new AC(), new AC());

        // add nodes
        lRoot.add(new TextBox(10), new CC());
        lRoot.add(new Rectangle(30,30, Color.YELLOW), new CC());

        // create scene
        Scene scene = new Scene(lRoot, 600, 300);

        // create stage
        stage.setTitle("Test");
        stage.setScene(scene);
        stage.setVisible(true);
    }
}

This results in the following layout:

(more…)

Continue ReadingJavaFX 2.0 EA and MigLayout

First baby steps in iOS

Everyone seems to be developing iPhone / iPad applications lately. And let’s be honest; it’s great hardware. Long battery life, good UI, looks great. I must admit that I’m one of those “I don’t like the way Apple treats its customers and therefore I do not buy Apple” people. So I have a HTC phone, an Acer laptop, a Popcornhour media streamer, anything but Apple.

But recently someone asked me if I would be able to develop an iPad application and I had to say no. However, the fact is that business is still slow and that I’m still using my reserves frequently to make ends meet (living in a somewhat country side area doesn’t help my opportunities either). So I decided do a trial project for myself, just to see what iOS is like. Having done Objective-C somewhere in ancient history and remembering I liked it back then, was a good motivator, and I figured I would be able to pick it up fairly easily considering all of the programming languages I have coded. So I bought a book and spent a number of evenings reading through it, until I felt ready to give it a try.

I’m a strong believer in that every trail project should take on a real world situation, so you will be forced to tackle actual problems and not just the ones you think are interesting. We have a hour registration system we use internally and is used by a few of our customers. The main hour entry is done via an applet and I figured that would be an interesting test case; hour entry on the iPad / iPhone. It required me to do GUI and communicating with the back-end. (more…)

Continue ReadingFirst baby steps in iOS

About Oracle and Java

  • Post category:JavaOracle

You know, half the world is stumbling over each other trying to point out that Oracle is alienating the open source community from Java. And maybe they are, but until now, for me, it is still undecided.

Yes, Oracle did make Apache leave the JCP. But Apache was the one mixing the JDK7 specs with the fact that they wanted Harmony to be put through the JVM certification. I understand Apache, but I also understand Oracle for wanting to move forward. And for all the negative issues that people like to mention, Oracle also scored some points with me for getting Java on the Mac rolling again (they would score big time with Java on iOS, but that is a different matter and probably biased by my latest Objective-C experiences). And Google with Android, well, would the Android JVM pass the JVM certification? Most likely not, so legally it should not be called Java. And just like Microsoft wasn’t allowed to “abuse” Java many winters back, neither should Google.

For now Oracle is getting the benefit of the doubt, let’s see where they are taking it. The soup usually isn’t eaten as hot as it is served. [freely translated Dutch saying.]

That doesn’t mean that one should be oblivious to the negative points. What if Oracle is leaning too hard on the open source community and they are going elsewhere… Where would they go? DotNet? It’s not like Microsoft is much better than Oracle. PHP? Come on, PHP is just a scripting front-end for a bunch of Unix system libraries. It needs some serious growing up to be able to do full scale software development. Scala? Python? (more…)

Continue ReadingAbout Oracle and Java