SwingLabs - Direction and Status
Around June of last year I first became aquainted with the JDNC project. As a professional Swing application developer, I was very interested in an open source project that would make my job easier. It was clear to me that JDNC was positioned at the right time to make a huge impact on rich client application development.
Swing is an excellent UI toolkit. It provides clean abstractions between the model for a UI component, the component, and it's painting code. In my years of working with Swing (and writing a few app frameworks and component heirarchies in the process) I was mostly satisfied. Yet there were a few things missing from the standard toolkit that I felt were really important, and that most of us writing Swing apps have implemented independently.
For example, in forms based database applications a "date chooser" component is a must have. Yet, there wasn't a default date chooser in the Swing toolkit. Other examples of often implemented features include sortable tables, saving component size/state to preferences, login dialogs, progress dialogs, error handling, action frameworks, row highlighting in JTables and JLists, and default renderers for currency, decimal, and other data types.
The JDNC project was initiated to do two things; first, to make writing Swing applications easier. Also, rather than having to wait 18 months to 2 years for new functionality to be rolled into the JDK, JDNC allows developers to get their hands on tomorrows technology today. Second, the JDNC project was established so Swing developers could prototype features, components, and prospective API's before actually incorporating them into the JDK. This provides the Swing team with much quicker and more applicable real world feedback, and has proved invaluable.
For all these reasons I was drawn into JDNC. Since having joined Sun in November of 2005, I'm now the SwingLabs team lead. The rest of the team is composed of a very talented and intelligent group of people from around the world, both within and without Sun. Together we are working towards a 1.0 release of the SwingLabs projects (which include JDNC).
I want to give a brief description of the current status of the project, where we are headed as a team, and how you can help us create a library so useful that you would recommend it to your collegues.
Earlier this year JDNC was subdivided into three different projects. These were DataBinding, SwingX, and JDNC. A single parent project, SwingLabs was also created. SwingLabs is intended to operate in a manner similar to the GNOME project. Just like GNOME, SwingLabs is really the sum of it's parts, not a true project on it's own. It serves as a single point of entry into a host of related sub projects.
At this moment, we are working hard to make the APIs in the SwingLabs projects (notably SwingX, DataBinding and JDNC) stable. We realize how important it is for developers to have a stable API base to work with. I wish I could say that we were finished making incompatible changes to the source code, but we aren't quite there yet. What I can say is that 80%-90% of the code base is stable. The majority of the flux is in the databinding APIs, particularly the binding packages. In a future set of articles I'll discuss the details of the binding framework.
The SwingLabs developers have done an awesome job working on demos and fixing bugs in the SwingX code base. The UI components are really looking good. There are some excellent components and code in the incubator as well.
I believe the biggest need we have in the project right now is better documentation and presentation. We have aquired the swinglabs.org domain which will soon host our "user" website. The java.net web pages will continue being used as the main development pages (meaning, advanced developer information will still be located on java.net), but http://www.swinglabs.org will be designed for individuals who are interested in getting the latest jars, but not in hacking on the sources themselves.
Second, there are three levels of documentation that need to be addressed within the projects, listed in order of importance:
- HowTo's, tutorials, code snippets, tips & tricks, etc
- High level "whitepaper" documentation
Finally, we are working closely with the NetBeans team (and all other IDE's are invited too!) to ensure that our components are toolable and comply with the JavaBeans specification. Tool support is a very important driver for the SwingLabs projects.
In summary, SwingLabs aims to provide a suite of components and technologies that will simplify data oriented application development in Swing. We're getting close to a 1.0 release (the exact date will be announced Friday, Aug 19th). We are working to provide better and more clear documentation, examples, tutorials, and a more pleasant user experience. We welcome help and advise!