Balise, a Buoy GUI Builder

by François Guillet,

current version v1.4, released 2007/02/22

check Discussion Forum for possible recent beta releases

1. What is Balise?

Balise is a Java GUI Builder that uses the Buoy Toolkit. If you don't know what Buoy is about, please have at look at its home page.

One attractive feature of Buoy is the possibility to serialize user interface to XML definition files that can be loaded at run time. Once again, please read the section named «Designing and Building Interfaces» on the Buoy main page for a discussion on the benefits of this design. The purpose of Balise is to graphically design the GUI component you have in mind, save it in an XML Widget definition file and then load it at run time. This GUI component may range from a simple widget to a whole window. Widget variables are accessed in the program using their names; Balise basic code prototyping features even avoids having to type variable retrieving in the source code.

2. Design

The driving force for writing a GUI builder was not only the possibility to have the Buoy UI definition stored in a file separate from source code, but also the opportunity to design a graphical GUI builder that did not entirely rely on WYSIWYG principles. Generally, an application that produces a graphical result can be either be edited at graphical level (the WYSIWYG principle) or at logical level (generally using text based input files, in which case the application is a formatter). Logical editing is generally far more powerful than graphical editing, though generally considered slower and more tedious, without even mentioning the learning curve. This leads to the result that the most popular tools (i.e. the so called WYSIWYG ones) aren't necessarily the most powerful ones.

GUI editing is no exception to this rule. Any modern GUI makes use of logical rules like anchors, springs or a hierarchical layout to layout widgets or components. But most of the time, editing still takes place in the GUI window that is to be built, much like in a word processor. Some attributes or properties can be set in a different window, but most of the graphical layout is edited in a WYSIWYG manner : widget location, widget size, etc... The problem is that this procedure requires that the logical layout information that rules the GUI is compatible with graphical editing. It is true for anchors or spring layouts, but it is especially inadequate for a hierarchical layout like the one Buoy (and Swing) uses. I guess that's why NetBeans GUI builder is IMO not that good, and Foam and JBuilder uses plain, flat layouts that are suitable for graphical editing (but are not standard Swing so to speak). In other words : Swing component layout is not really suitable for traditional GUI WYSIWYG design.

A solution is to address the logical structure of the GUI in another editing window. Balise thus uses two windows to edit a GUI component : the window where the component aimed at is being built and an editor window in which its logical structure is edited. In fact, since much of the editing addresses the logical aspect of the component, the editor window is the one that is used most of the time. The edited window, however, is still very useful in some circumstances, for example to graphically layout widgets in an ExplicitContainer, for which widget layout is, well, explicit (!), and not based on logical layout rules. Since editing can be done in the editor window most of the time, the edited window can be put in a run-time mode in which it actually behaves like it will at run time. It also possible to attach a Balise editor window to any window widget at run time, whether the window widget has been built from an xml definition file or source code.

3. Current State

IMO, 1.1 release fullfilled the intial goal that made me start this project. Of course many enhancements could be brought to Balise, like the use of docking windows. But I think major features are here, and since I has other projects to care for as well, I guess Balise is going to stay in this state for a while. Of course, it will be updated as Buoy evolves. At this moment, the 1.3 version for Buoy 1.7 is available.

4. Download

Download binary or binary + source distributions at Sourceforge download page.

5. Documentation

Have a look at the (very short) Balise.txt located in the Balise directory after decompressing the tarball. The User Manual includes a Getting Started section. The manual is also available as a PDF file.

6. Sourceforge Resources

Here are links to discussion forums, bug reports and feature requests.

7. Known bugs

Sourceforge Logo