Design goals
Fiswidgets (Functional Imaging Software Widgets) is a set of Java classes
built on top of the Java AWT
and Java Foundation Class (JFC, Swing) toolkits; it includes both
GUI components and thread control components and is designed to permit
a programmer to very quickly write simple Java graphical user interfaces
to run application programs that would otherwise be invoked by a command
line or from within a shell script. FisWidgets is designed for ease, speed,
and cleanliness of use; in order to achieve these goals a number of constraints
are placed on the functionality and appearance of fiswidget applications.
GUI components
Fiswidgets supplies a number of high level GUI components, eg text fields
and numeric fields with optional labels and default values. In addition,
there is a generic component, so that the programmer can design a customized
component and add that to the fiswidgets application. Components are added
to the fiswidgets window in a "flow" layout, from left to right, with
line breaks set by the programmer. A standard menu is added to the top of
the fiswidget application window, and a standard toolbar is added to the
bottom. A popup window component (FisAdvancedButton) is supplied, so that more
complex or infrequently used parts of a fiswidget GUI may be hidden from
the user.
The popup window appears as a button; when the user selects this button,
another window containing any number of additional fiswidget components
appears.
We explicitly and intentionally put a lot of restrictions
on what fiswidget GUIs can look like. The idea is that a computer
programmer does not need to spend a great deal of time dealing with
aesthetic issues, gridbox layouts, etc., but can quickly and efficiently
produce a serviceable set of GUIs. And, by enforcing many constraints on
appearance, fiswidget applications will all have a similar look and feel,
without explicit collaboration amongst programmers.
Software architecture
The following diagram describes how the fiswidgets API fits into
the general Java environment.
At the lowest level is the standard Java language. All Java language
constructs, including AWT components, may be used in a fiswidget application.
However, the use of AWT components is discouraged, because one of the design
goals of fiswidgets is to protect the programmer from changes and updates
to the Java language. At the next level are the publicly available Java
libraries, eg Swing, JGL, etc.. Fiswidget applications can use classes
from any Java libraries the programmer needs. The fiswidgets API uses the
Swing components, and therefore sits on top of both the Java language and
the public libraries layer.
Finally, the fiswidget application is written using the fiswidgets API.
Within the fiswidgets API, the software architecture preserves a
very clean separation bewteen GUI elements (the FisBase class), and
thread management elements (the FisRunManager class).