Joplin

JavaOne 2005 is finally over and I'm so tired I'm not sure I will wake up tomorrow. Or the day after tomorrow. Yet, I can finally unveil one of the demos I have been working on during the past weeks. It is an MP3 music player called Joplin Richard Bair, Joshua Marinacci and I developed to present NetBeans' Matisse GUI builder, SwingLabs' data bindings and the SwingX components. As you can imagine, I mainly worked on visual effects whereas Richard did all the hard work required to wire the data source (an iTunes XML library) to the SwingX widgets. Here is a small screeshot:

I spent most of my time working on the spectrum analyzer at the top of the picture (thanks to KJ, JID3 and JavaZoom for their great source code) and the CD shelf in the middle. The shelf is derived from an account chooser I designed and implemented for Scott Violet's and Shannon Hickey's talk Extreme GUI Makeover. This component shows the list of all the available songs with the associated album cover art. You can scroll the list to admire a nice 3D effect implemented with Java2D. The code is quite big (almost 1000 lines of code) but also easy to understand.

Joplin is available right now as an Open Source project on java.net and you can download it to discover the power of data bindings, Swingx and Matisse. Using Matisse Richard and I (Richard on thursday during JavaOne's ending keynote) showed how to build Joplin in less than 7 minutes (using pre-built components like the music player at the top :).

Just note that any complaint about the source code will most likely fall into the same place where I store the memories of my acts when drunk: in a dark, uneasy place. We cranked out this demo in a very short time and we used some shortcuts. Well, a lot of shortcuts. This is by no mean a good example of code design for Swing.

Finally, I'd like to thank the NetBeans team, not only for providing us Matisse, but also for their support during the development of Joplin. You've been vital to the success of this project guys :)

Comments are closed.