Features

Hierarchical Model-View-Controller

HMVC is the design pattern Jazz is based on and what defines your application’s architecture.
To understand what HMVC is read this article on JavaWorld.

Asynchronous Multi-Threading

Swing event handling code runs on a special thread known as the event dispatch thread. Most code that invokes Swing methods
also runs on this thread. If code takes a long time to run it results in a GUI freeze and your program becomes unresponsive.

Quote from the Oracle/Sun documentation:
“Careful use of concurrency is particularly important to the Swing programmer. A well-written Swing program uses concurrency
to create a user interface that never “freezes” — the program is always responsive to user interaction, no matter what it’s
doing. To create a responsive program, the programmer must learn how the Swing framework employs threads.”

Jazz is designed for concurrency and takes this burden from the developer, no more freeze!

Event-Driven Architecture

Event-driven programming is a way of creating applications for graphical environments.
Your program responds to it’s user’s actions, not the other way round.

Internationalization (i18n)

Internationalization is the process of designing an application so that it can be adapted to various languages and regions
without engineering changes. Sometimes the term internationalization is abbreviated as i18n, because there are 18 letters
between the first “i” and the last “n”.

In Jazz all you have to do is provide a ResourceBundle through the ResourceManager and all text in your program is
automatically translated without extra coding!

Forms, Controls, Data Binding and Validation

Forms are the basic element of a GUI application. It is the canvas on which you draw your graphical interface.
Forms correspond to the different windows, dialogs and views in an application.

Controls are visual elements which display information and interact with the user.

Jazz provides all the controls you need for your gui including a datechooser and auto-completion.

Controls like List/Table/Tree/TreeTable have built-in support for Sorting, Filtering and Searching.
When you sort/filter the currently selected row(s) remain selected.

Controls are typesafe (generics), for example:

TableField contacts = new TableField&ltContact&gt();
Contact contact = contacts.getValue(); // no cast!

Data Binding binds controls to the domain model (keeps model and view in sync).

Validation checks if user input is valid, for example if a required field contains a value.

Example of Data Binding and Validation with Jazz:

public class Form extends FormView {
	// Controls
	private TextField firstname;
	private TextField birthday;

	public void init() {
		createFields();
		createLayout();
	}

	private void createFields() {
		firstname = new TextField("firstname"); // DataBinding: firstname
		firstname.setRequired(true); // validation: field is required!

		birthday = new TextField("birthday");
	}

	private void createLayout() {
		setLayout(new FormLayout())
			.addLabel("First Name").addField(firstname)
			.addRow()
			.addLabel("Date of Birth").addField(birthday);
	}
}