SwingX

SwingX contains a collection of powerful, useful, and just plain fun Swing components. Each of the Swing components have been extended, providing data-aware functionality out of the box. New useful components have been created like the JXDatePicker, JXTaskPane, and JXImagePanel.

See wiki for more details.

SwingX-WS

The SwingX-WS project introduces a set of JavaBeans and APIs for interacting with web technologies from within Swing applications. It contains:

  • org.jdesktop.http: An API for working with HTTP
  • org.jdesktop.dom: Contains API for simplying working with DOM
  • org.jdesktop.swingx: Contains the JXMapViewer component - a Google maps like component for Swing
  • org.jdesktop.http.async: Code for working with HTTP in an asynchronous manner. Contains an all Java version of the venerable XmlHttpRequest object.
  • org.jdesktop.html.form: Utilities and API for working with HTML forms
  • org.jdesktop.swingx.ws.yahoo.*: A series of packages and classes for working with the Yahoo! web services, as JavaBeans.

See wiki for more details.

TimingFramework

TimingFramework is a library for making Java animation and timing-based control easier. It was used extensively for the JavaOne 2006 keynote demo, Aerith, as well as many other demos produced by the Swing team. It can be used anywhere a time-based system is required. It is currently under quite a bit of internal review, and will be undergoing some minor changes.

Incubator

Is there a facinating new feature or component that you'd like to share with the community? Welcome to the SwingLabs Incubator project! The incubator is a place where anybody who has signed the JCA may become a developer. It acts as a breeding ground for new ideas. Code that has matured within the incubator and has found acceptance within the community becomes a candidate for inclusion in a main SwingLabs project, or perhaps a project of its own.

See wiki for more details.

Aerith

Aerith is a Swing Mashup (aka Smashup) combining three web services: Google Maps, Flickr, and Yahoo's geocoding webservice. It allows users to create, view, and share slideshows of their road trips. It was presented as a demo at the 2006 JavaOne conference.

In addition to being a cool demo, Aerith is licensed differently from the rest of SwingLabs. It is BSD. This means, you're free to take the code, modify it, use it in your production applications. Steal it! Please! We're hoping that Aerith might give you some good ideas and lead to better looking Swing applications.

Parts of Aerith have also been extracted into other SwingLabs projects. The mapping component in Aerith was extracted and is now part of the SwingX-WS project

Deployment

The Deployment project exists to provide tools for simplifying the process of deploying desktop applications. The project's initial focus will be on providing Ant tasks, a JNLP download servlet, and detailed documentation. Future tool ideas include tools necessary for making executable Java applications.

Here is a more detailed description of the initial tools planned for the project:

Fuse

Fuse is a lightweight resource injection library specifically designed for GUI programming. In your GUI classes, you define variables and annotate them. The resource injection engine then at runtime discovers the resource (perhaps a color or an icon) and sets the class variable accordingly. Dependency injection meets Swing and SWT!

JDIC

JDIC provides Java applications with access to functionalities and facilities provided by the native desktop. It consists of a collection of Java packages and tools. JDIC supports a variety of features such as embedding the native browser, launching the desktop applications, creating tray icons on the desktop, registering file type associations, creating JNLP installer packages, etc. Many new features are contributed as incubator projects from the community.

SwingWorker

When writing a multi-threaded application using Swing, there are two constraints to keep in mind: (refer to How to Use Threads for more details):

  • Time-consuming tasks should not be run on the Event Dispatch Thread. Otherwise the application becomes unresponsive.
  • Swing components should be accessed on the Event Dispatch Thread only.

These constraints mean that a GUI application with time intensive computing needs at least two threads: 1) a thread to perform the lengthy task and 2) the Event Dispatch Thread (EDT) for all GUI-related activities. This involves inter-thread communication which can be tricky to implement.

SwingWorker is designed for situations where you need to have a long running task run in a background thread and provide updates to the UI either when done, or while processing.

This project is a backport of SwingWorker included into 1.6.

Swing Layout

Known also as "GroupLayout" and the "Matisse Layout", this project contains the code that formed the basis of the layout used during "Free Design" in the NetBeans GUI builder. This code is included in Java 6, but is available as a part of SwingLabs as a backport to Java 5.

Wizard

Provides a simple API and UI for Wizards, a commonly used UI pattern in GUI interfaces. Traditionally, everybody has needed to write their own Wizards from scratch, and such code is painful and hard to get right.

This library aims to provide a simple, relatively bulletproof API for writing Wizards. The UI for Wizards are pluggable; the default implementation conforms to the JLF usability guidelines for Wizards.

This library was originally designed as a replacement for NetBeans' Wizards API (in fact it was designed to settle an argument), and takes into account the long history of that API and problems encountered with it over the years. It provides a simple, easy-to-use solution that enables any Swing application to provide Wizards with a minimum of code and effort.

Swing Helper

This project has some interesting little tidbits to help out in Swing programming. CheckThreadViolationRepaintManager helps to detect Swing events an painting code that occurs on the wrong thread. EventDispathThreadHangMonitor helps detect deadlocks or slow running Swing code. JXLayer is a universal decorator for Swing components which will help you to enrich you application interface. Here a few examples what can be done with JXLayer: a validation indication for text components, locking a container during time-consuming operation, component's animation etc...