# Swing Application Framework

The Swing Application Framework (JSR 296) is a Java specification for a simple application framework for Swing applications, with a graphical user interface (GUI) in computer software. It defines infrastructure common to most desktop applications, making Swing applications easier to create. It has now been withdrawn.

## Features

The JSR 296 specification defines the basic structure of a Swing application. It defines a framework as a small set of extensible classes that define infrastructure common to most desktop applications:
* management of application life-cycle, startup and shutdown;
* support for loading localized resources;
* persistent session state;
* support for loosely coupling actions to their presentation.

## Status and roadmap

Development of an open-source Reference Implementation called "appframework" began in 2006. It was originally expected that this implementation would be the means for integrating JSR 296 into the upcoming Java SE 7 (Dolphin) version of Java, and the project was scheduled to be included in milestone 5 of the Java Development Kit JDK7 development. However, in August 2009, it was announced that the project would not be included, due to an inability to reconcile design flaws and achieve consensus among the JSR 296 team before the milestone 5 deadline.
The original Swing Application Framework implementation has been put on hold indefinitely. It was later withdrawn at the Spec Lead's request in June 2011. The last public release of the appframework project was version 1.03.

## Forks and alternatives

Several forks of the original implementation have been started by open-source communities, and several other application framework libraries have been created to achieve goals similar to those of JSR 296.

### Better Swing Application Framework

    The Better Swing Application Framework project, or BSAF, is a fork of version 1.03 of the original appframework project. BSAF was created at Project Kenai in September 2009 and is currently the most active of the forks. Its goals are to eliminate bugs and execute small design fixes on the original appframework implementation while maintaining compatibility with version 1.03.
Last release BSAF 1.9.1 was 2012. BSAF is still available at SourceForge, which has a button that says "This project can now be found here," that takes you to the now defunct project Kenai.

### Guice Utilities & Tools Set

    The Guice Utilities & Tools Set, or GUTS, is an implementation of JSR 296 that combines the appframework with the Google Guice Dependency Injection library. Like BSAF, it is also hosted at Project Kenai. Unlike BSAF, GUTS is making a break-away from the "problematic singleton" pattern. This project began in June 2009, and is currently not active (version 0.1 stuck 2010).

### Swing Application Framework Fork

    The Swing Application Framework Fork, or SAFF, is a fork of appframework 1.03. It is currently hosted at GitHub. However, this project has been dormant since October 2009.

### TreasureMap

    TreasureMap is a library providing standalone use of appframework 1.03's ResourceMap implementation.

### NetBeans Platform

    The NetBeans Platform is a robust Swing application framework, with many more features, as well as much more documentation. Because of the JSR failure/hold, SAF has been removed from Netbeans as of version 7.1. The developers seem to have no desire to provide any alternative, and suggest that the Netbeans platform is the right mechanism for porting SAF projects to a supported platform.

### Eclipse RCP

    Eclipse RCP is a big SWT (an alternative to Swing) application framework, for bigger projects, needs more time for understanding.

### jGAF - Java Generic Application Framework

    jGAF is a simple and compact library to quickly build full-featured Java Swing Application. This free open-source framework provides APIs to handle application life cycle, menus, configuration, OS integration, application data persistence, application protection, wizards, preferences, etc.