JavaFX Grid Component Worries

If you’re working with JavaFX, you will probably know these two truths:

  • The JFXtras library has some really awesome components
  • The JavaFX platform is trying out new controls in the preview packages

A good thing about this, is that the JavaFX team is taking the good stuff from the JFXtras library and putting it into the platform. A bad thing about it is you start to expect the preview controls have the same functionality as the JFXtras controls.

Continue reading

Moving Lines Around In JavaFX

Did you know, you can define ‘relative’ Lines in JavaFX? When you’re drawing complex visualizations, you sometimes want to have a Line that is horizontal and 10 pixels long, no matter what. No problem you say, just define its starting point as (x, y) and its end point as (x+10, y):

Line {
  startX: 40
  startY: 40
  endX: 50
  endY: 40

Sure, easy peasy. What if you want this Line to move around based on some variable’s value?Continue reading

JavaFX Transitions : An Oddity

I’ve been working on a nice looking application in JavaFX with some nifty transitions. ┬áDoing so, I noticed an odd ‘requirement’ when working with Transitions. The problem arose when I tried to split my interface into different files. On one stage, I used two Stacks that each represented a state. Each Stack was defined in its own JavaFX script and another Script contained the transitions and event handlers.

What happened was that not all Transitions seemed to work. I have not yet been able to determine the root cause of it, but the Transition seemed unable to update properties of its target node. After some frustrated trial and error, I discovered a working solution: put the Transitions in the same file as their target node.

Again, I have not yet found the root cause. If someone can tell me why this is a problem, please let me know. I can’t stand not understanding :)


Apple Mail And Outlook: Making Signatures Interoperable

Recently I switched from using Windows and Outlook at work to my brand-spankin’ new MacBook with Apple Mail. The first thing I ran into was getting replies to my emails that my signature was all borked.

After a long search I have finally been able to fix these so they look good in my colleagues’ Outlook. The problem lies with the editor in Apple Mail, somehow it just makes completely borked HTML that Outlook interprets differently.

The good news is that the solution is devilishly simple. Just follow these steps for each signature you want:

  • Create the signature in Apple Mail
  • Save the signature
  • Close Apple Mail
  • Open ~/Library/Mail/Signatures
  • Open one of the .webarchive files with TextEdit
  • Make the signature the way you want it in TextEdit
  • Save it and re-open Mail and you’re done!



Integrating JavaFX with regular Java – Part 2

In my previous post about integrating JavaFX with regular Java, I briefly showed you how to properly construct a JavaFX object. This post will elaborate on that principle and provide the JavaFX UI a way to communicate with the Java ‘backend’.

Before I continue, I will explain the design of the application in which I used the method described below. This will allow you to decide whether this is also the way to go for your application, or maybe you still want to try something else. Ok, ready? Here we go!

Continue reading

Enterprises waste money with architects…

This in itself is no news obviously. The bigger an enterprise gets, the more likely it is to waste money due to the introduction of management layers and function decomposition. What is function decomposition you ask? I am not sure it is a proper business term, but in programming languages it is defining the value of a function as the value of other functions. This can generally be done over multiple levels and potentially create an infinite loop.

When you perform function decomposition, you create a set of dependencies between these functions. The original function’s value will now be defined as the result of the entire chain of underlying functions. The problem with this is that it is hard to maintain the exact definition of the original function if that of any of the others changes. I.e. it is becoming hard to ensure the correctness of the first function.

Additionally, the functions in the ‘middle’ of the decomposition chain originally have no meaning, except to the first function that calls them. After all, they are responsible for performing part of its task. The risk that rises from this decomposition is the fact that these functions may eventually be used elsewhere and because of that require slightly different functionality. Does this influence the first function?

Okay, enough theoretical babble, what does this have to do with enterprises wasting money? Continue reading

Atlassian GreenHopper 5: Even Better Agile Planning

Let’s get one thing out of the way: I love the Atlassian tools. At work we are sadly running way behind on the newest versions. Thanks to the Atlassian Starter licenses I can afford to fool around with the newest versions on my personal projects. Integrating the whole suite will give you a very strong support environment for your development.

About two weeks ago, Atlassian announced the 5.0 release of their agile planning tool GreenHopper. It is a great tool for creating and managing your project’s user stories, tasks and sprints. The drag and drop interface that allows you to move cards from sprint to sprint just like moving a post-it on a board has been improved. It now allows for editing almost anything on a task in-place, without having to leave the planning board.

Sadly I have not yet had the chance to try this project in an actual team. I mean, dragging cards across versions and sprints is cool, even when you are the only person on the project, but GreenHopper’s real power is in working with agile teams. Luckily there is light on the horizon. Next month I am going to participate in a relatively small innovation project, to perform some rapid prototyping. I have the responsibility for the development methodology and process and I intend to make full use of GreenHopper and demonstrate its value to at least the customer. Who knows, maybe we’ll finally upgrade the corporate software as well :)



Integrating a JavaFX UI with regular Java – Part 1

When JavaFX was first released, I didn’t give it much attention, as it felt like yet another visualization platform. With the latest release of JavaFX 1.3 and a project requiring a ‘fancy’ user interface, it was time to give it a try. The surprise came quickly: after downloading NetBeans and the JavaFX runtime, I was able to quickly build user interfaces that actually look cool.

After some tutorials and many bogus screens with crazy animations, it was time to put JavaFX to work on a real project. We had an application that receives a lot of data, processes this and stores it in a database. The data reception and processing were already fully developed in ‘regular’ Java using the Spring framework. The goal was to somehow try and integrate this existing code with a fancy JavaFX interface to visualize the data.

Continue reading

Spring hand in hand with Swing Application Framework

Starting work on a new application is always a fun period. You get to choose all your frameworks from scratch and you are not limited by any previous mistakes (or decisions, as some call them). For this particular project I had to come up with an architecture that would support a graphical interface, easy configuration and potentially swapping components in and out.

The configuration requirement and the need to be able to swap components naturally made me choose Spring. Using dependency injection and Spring’s easy PropertyPlaceholderConfigurer, these requirements are easily met.

For the interface, I decided to give the Swing Application Framework (JSR 296) a go. The Swing Application Framework (SWAF from now on) is an attempt at making life with Swing a lot easier. It provides the developer with an application lifecycle, easy component configuration, simplified long-running tasks and many more simplifications. The reference implementation can be found at

Continue reading