Monday, January 30, 2012

A Complex Widget : Waterfall Display

A waterfall display (aka Spectrogram) is a moving bitmap image that shows the history of the recorded spectra. As time proceeds, old samples will be scrolled out of view. I think it is a complex widget (at least for me). I developed it to explore the JavaFX capabilities. The problem is that JavaFX Image and ImageView classes are rather simple to perform complex image operations. Therefore I used AWT classes then converted the buffered image to a JavaFX image in PNG format with the PngEncoder which is developed by J. David Eisenberg (PngEncoder).

The waterfall display is refreshed at intervals between 200 and 3200 ms. The intensity data is stored in a byte array. At each refresh time the last line is added to the array, and the image is regenerated in the memory with the timestamps and the overlay texts if exist.

In this process, first the waterfall part and the timestamp part of the image are created as buffered images. The waterfall part contains the byte array which has the intensity data normalized to 0 – 127. The data are colored with an indexed color model spanned between a first color and a second color. Then both parts are combined into a full buffered image on which the texts are drawn. Last operation is the conversion of the buffered image to an PNG format so it can be handled by JavaFX Image class. Whole generation process runs in the background so the mouse movements are not affected. I implemented JavaFX Task class for threading and think it is easy to implement.

An extended cross hairs is added to get the intensity value at desired points. It is also used to add overlay texts on the image. They can be entered by right click.

The source code can be downloaded from : javafx-widgets

Saturday, January 21, 2012

Simple Calendar for JavaFX 2.0

One of the missing controls in JavaFX 2.0 is a date picker. So I have developed the SimpleCalendar for that purpose. It was also a good practice to learn what you could do with JavaFX. You can download it from

The SimpleCalendar is a combination of two components: A popup container for date picking and a button to display the hidden popup container. The container consist of three blocks. The top block displays the month and the year and hosts two arrows to navigate back and forth between months. The center block only displays first letters of the names of the days. The bottom block displays the days of previous, present and next months. The names are retrieved based on default locale. Since the first day of the week is Monday in some locales it is taken into account.

A string bean property (changed to ObjectProperty 28.01.2012) is used to bind the date information. It can be accessible by adding a change listener to the instance of SimpleCalendar.

Shock the senses

I read an article in Java Magazine about JavaFX 2.0. The title was pretentious : Shock the senses. I downloaded the latest version along with JDK 7 and the examples as well. After some small programming trials and playing with examples I have to admit that it is hard to deny that it would be a compelling rival to Silverlight and Flash. Even the kingdom of Qt could be shattered by what JavaFX will offer in the near future. For now the latest version is solely available for Windows platforms. Nevertheless it will be an integrated part of the JDK 8 platform.

According to long-term roadmap for JavaFX the important dates are as follows:

  • First half of 2012 : JavaFX 2.1 (Mac OS X GA, Linux Development Preview)
  • Second half of 2012 : JavaFX 2.2 (Linux GA)
  • 2013 : JavaFX 3.0 (Included in JDK 8)