Introduction

The AWT (GUI) class libraries represent perhaps the major weakness in the Java system. Due to the need for a cross platform system, and severe time constraints when it was written, only very basic lowest common denominator functionality is implemented. Missing are such commonly used widgets as image buttons, tabbed folders, scrolled windows, progress bars etc. A number of third parties have written libraries to fill in the gaps. It was expected that much of this functionality would be included in the Java 1.1 release, so we had not recommended their use. However, it appears the 1.1 release of Java concentrated on fixing bugs, improving performance, and implementing a different event model. The only new widgets are the popup menu and scrolled pane. Hence use of third party extensions will likely be required in most applications. Below we survey several such packages and make recommendations.

Recently, Javasoft has at long last addressed the problems with the AWT with their new Java Foundation Classes. These address most of the AWT weaknesses, and will be integrated with the core JDK by the end of this year.

Requirements

Below is a list of useful components and desired properties.

We require any third party toolkit to interoperate with the basic AWT widgets. This is for several reasons. None of the packages reviewed had all of the desired functionality. A "propietary" extension would make impossible to "mix and match" to obtain additional functionality. As the third party market will likely be active and rapidly evolving, we do not want to preclude use of future better products. And should some non-standard extension cease to be supported, it would likely mean more effort to port the code to use some other package. This requirement thus discourages use of a number of otherwise reasonable packages, including the Netscape Internet Foundation Classes (IFC), and the Marimba, Koala, and SubArctic toolkits. All of these either do not support or strongly discourage use of the basic AWT widgets. Caution should be exercised with regard to the extended widgets in various 3rd party GUI builders such as Java Workshop, SGI CosmoCode, Asymetrix Supercede, and Symantec Visual Cafe, to be sure they are transportable to other platforms.

Specific Libraries

The following specific libraries were reviewed. We do not claim it to be an exhaustive set.

Cooper-Peters Eye-Opener

Only an "alpha" version demo is currently available. This appears to be an outstanding package, even in "alpha" form. It includes all the above functionality with many bells and whistles, and also performs exceptionally well. However it appears to completely replace the AWT, but is listed here anyway to demonstrate that impressive GUI toolkits can be constructed from pure Java code. It implements its own lightweight component class rather than use the AWT. It appears to use both an event model similar to JDK 1.0 as well as a model like JDK 1.1 but using Observer/Observable classes. The layout manager used internally is a custom one using the "springs and struts" paradigm.

Alas, the company recently sold out to Micro$oft. So the product will never be released. The proclaimed strategy is to incorporate the ideas (and hopefully the performance) into the Microsoft AFC (and not of course to kill or buy off or whatever a potentially serious competitor to that product...). The most recent beta release of the AFC did not show much of the promise of this package.

Symantec Visual Cafe Widgets

Functionality: The Visual Cafe GUI builder includes most of the above, and they appear to be transportable to unix platforms. In principle one can use the documentation to write programs without using the GUI builder. A few widgets are buggy, and the look is not as professional as some other kits. The hierarchical tree does not support multiple columns.

Cost: The cost is $200 for the complete GUI builder package. Although it runs only on Windows, again one can write programs on unix using the widgets and the documentation.

Microline Component Toolkit

Functionality: The Microline Component Toolkit contains only Tabbed Folder, Hierarchical Tree, Progress Bar, and MultiColumn List widgets. The implementations include considerable flexibility. The Tabbed Folder was the only one encountered that supports multiple rows. Performance was good even on a slow SGI Indy with no jit compiler.

Cost: A limited version for non-commercial use may be downloaded free. This limits the Tree and MultiColumn List widgets (actually their common superclass) to 105 rows and is unsupported. An unlimited version including printed documentation and 3 months support costs $399. Source is not available.

Microline was recently bought by Neuron Data. While they are still selling the original Microline toolkit, it appears to have been absorbed into their "Elements" product which adds a number of additional components. This looks like a superb package, based on the web-site demo, with comparable performance to the Cooper-Peters package. Unfortunately the cost is $895 per user, plus an additional $895 per user for 1 year of maintenance updates.

KL Group JClass BWT

Functionality: Includes an extended String class that supports mixed fonts and embedded images. Includes all the above except Convenience Dialogs and Toolbars. The new version of the product supports an event model similar to AWT 1.1. It allows one to write code using essentially the 1.1 event model and run it identically on either JDK 1.0.2 OR 1.1 with no source code changes involving the JClass widgets. (Use of non-JClass JDK 1.1 widgets/events is of course still not supported on JDK 1.0.2) Performance is a bit sluggish with an SGI, but decent on a Sparc Ultra and better still on a Pentium Pro with a jit compiler. Excellent html based documentation is included that provides descriptions of the classes and examples of their use as well as the usual javadoc generated API documentation. Description files for integration with Visual Cafe are available however their utility has not been tested. Javasoft has announced they will include this product in their "Java Studio" visual applet builder product. This is the same company that makes the XRT widget set for Motif.

Cost: Byte code is available for $49. Source code may be obtained for $199. Table and Chart widgets are also available for $399 each. The new release of the Chart widget now includes dynamic strip charts.

Microsoft Application Foundation Classes

Functionality: At present only a pre-beta release is available. It includes all the above list except combo-boxes and convenience dialogs. The present release only runs under JDK 1.1, however the widgets currently only support the old JDK 1.0 event model. This is supposed to change in the future. Although written by Microsoft, the code is written entirely in Java and the product is usable on Unix platforms. Also, the components do appear to completely interoperate with the basic AWT widgets. Interestingly, the look and feel does not exactly emulate the standard Win95 MFC widgets (which seems to be a goal of some other products such as Cooper-Peters). For example in the tabbed-folder, one must drag the tab outwards to select the panel, rather than just clicking on it. Performance is fair but should improve in the future.

Cost: Free, and expected to remain that way. Source is supposed to be made available (which would be astounding for Microsoft...)

Rogue Wave JLibraries

Functionality: Includes all the above except Scrolled Window and Convenience Dialogs. Performance of the demo on the web page was similar to the KLG widgets discussed above. This is the same company that make extensive C++ class libraries. The also make a collection class library for Java.

Cost: Apparently there are platform dependent versions of the libraries. They cost $99 for unix only, $99 for Windows only, or $198 for both, per single developer. Support adds nearly 50% to the base cost. Source is available for an additional $395 per platform.

Netquake Joltz

Functionality: Supports all the above list, except Convenience Dialogs. Supports a number of unique additional features including running text, a color picker, image maps, a splitter panel, and a wizard panel suitable for developing MS like wizards. Toolbar and X-Y graph widgets are under development. The same performance comments as for the above two libraries apply here.

Cost: Cost is $149 including source.

Graphic Java Toolkit

Functionality: Supports the above list except for Tabbed Folders and Hierarchical Tree. Some other components have lesser functionality than the above packages. Performance is reasonable. This is used as the basis of the (excellent) book "Graphic Java" by Geary and McClellan.

Cost: Free for non-commercial use. Source is not available beyond the parts printed in the book. Byte code and demos may be obtained via anonymous ftp from ftp.prenhall.com in the directory pub/ptr/sunsoft_books.w-053/geary/graphic_java.

Recommendations

In the long term, the recommendation will be to use the Java Foundation Classes from Javasoft. The presently released version is considered a "preview" in that the API will likely change in some areas, the performance is adequate but not great, and there are some bugs. Online documentation is available. However most aspects seem to be functional.

The Microsoft AFC package shows some potential. The most recent release (7/97) appears usable, unlike the earlier 4/97 release. However its performance is still not that impressive. Although it can interoperate with AWT widgets, this is not totally transparent unlike JClass and JFC. The Microline package is excellent, but only has a few components and its future course is uncertain as the company has been bought out. The Cooper-Peters package was outstanding, but will never become a product on its own. The Neuron Data "Elements" package is also outstanding, but very expensive. These two packages though do at least prove that it is possible to develop a high performance GUI library in pure Java code. The Rogue Wave classes seem overly expensive. Visual Cafe is a good (if imperfect) package for modest sized projects. However there are some issues to be addressed before large scale use. The Netquake package seems to offer a good combination of price, performance, and functionality. The KLG JClass package contains a fairly complete component set, is well documented, and is produced by a company with a long history in the GUI widget market. The main drawback is poor performance, particularly on SGI systems.

The current recommendation is to use the JClass package for development that needs a reliable, stable product in the near term future. For development that can afford to deal with the bugs, changing API, and incomplete documentation of the JFC, use of the JFC is recommended. Even in its "preview" release, it appears to be an excellent product, and we will almost certainly recommend it become the primary GUI class library when it becomes an official release later in the year.

The JClass libraries are installed on the B0 unix systems, and by accessed by:

setup jclass 2.05-1.1 (for use with JDK 1.1)

Online documentation is available.

Release 0.3 of the JFC is also installed, and may be accessed by:

setup jfc

Note the JFC requires JDK 1.1.2 or greater. It works with the "current" version of the JDK installed on both gobi (Solaris) and b0sgh (SGI).

Online documentation is available.

Before using any other package, please consult with us to insure that it will be supportable at B0 and not interfere with other code.


Last Update September 3, 1997

by patrick@fnal.gov