Roadmap |
From JAXXWiki
This page describes planned future versions of JAXX.
Contents |
Sonata
The next major release of JAXX, codenamed Sonata, is primarily focused on improving tools support, performance, and usability. The list of planned enhancements and new features in Sonata follows.
Performance
JAXX's runtime performance is already indistinguishable from hand-written code, but the compiler itself has not had any performance tuning at all. Its speed can be improved significantly (in fact, profiling will probably reveal some horrifyingly large inefficiencies). In Sonata, jaxxc's speed will be improved enough to make interactive use practical.
Better Java formatting
The formatting of generated Java code will be improved. Where applicable, generated lines will have comments indicating the source line (in the original JAXX file) from which they were generated. Reliance on anonymous inner classes will be reduced or eliminated, and CSS pseudoclasses will be coded more compactly. The overall size of compiled class files will be reduced.
jaxxcapture
Sonata will include a new tool, jaxxcapture. jaxxcapture is a command-line utility for converting existing Swing layouts into JAXX code. It accepts command-line parameters similar to the java tool, like -jar and -classpath, and launches the specified class or JAR file. Ctrl-clicking on a component then captures the component and produces JAXX code which recreates it.
jaxxcapture works by using java.beans.XMLEncoder to produce an XML representation of a Swing layout, and then compiling the XML into JAXX code. This is much easier said than done, as the XML produced by XMLEncoder is really just a simplified form of Java code -- it is a sequence of constructor and method invocations. Converting a sequence of constructor and method invocations into well-structured JAXX is a decidedly non-trivial task, but jaxxcapture will do a reasonable job on most layouts. The goal is to create a good starting point for a programmer to work from, not necessarily to create a completely finished JAXX file which needs no further attention.
Enhanced layout support
Sonata will provide full support for GroupLayout and FormLayout. The XML syntax for these layouts has not yet been decided upon.
NetBeans plug-in
A NetBeans plug-in which adds full JAXX support, including debugging, will be delivered with Sonata. Users will be able to use the Matisse form-builder to generate JAXX files.
AWT support
Sonata will support AWT components as well as it supports Swing components.
Simple animations
Sonata will be able to apply CSS pseudoclasses over a duration, rather than instantly. The syntax has not been fully worked out yet, but it will probably be something akin to the following:
JButton:mouseover[duration=500ms] {
foreground: blue;
}
This will cause JButtons to turn blue over a half-second period when they are moused over, remain blue as long as the mouse is over them, and then take a half-second to turn back to their original color when the mouse leaves. There will be additional properties for controlling acceleration, deceleration, and perhaps other features of the animation. More advanced animation will have to wait for Minuet.
JAXX's animation support will be based on Chet Haase's Timing Framework.
Minuet
The next major release of JAXX after Sonata, Minuet is much farther out and therefore less well defined. Minuet will continue to improve JAXX's tools support, but focus more heavily on adding new features and functionality.
JSR 296, "Swing Application Framework", support
Minuet will integrate with the application framework from JSR 296. As JSR 296 is a long way from completion, this is necessarily vague, but likely changes include:
- The <Application> tag will be changed to refer to the JSR 296 Application class. Any additional features of this class will be exposed.
- Minuet will support mnemonics embedded directly in label strings (e.g. "Save _As..." or whatever the final syntax ends up being)
- Some form of integration with the Action management introduced in JSR 296. Ideally it will become easier to create and integrate Actions.
- Any other integration which makes sense
Eclipse integration
Some level of Eclipse integration will be delivered, based on demand. This may be anything from a full-blown Eclipse perspective (probable) down to a document describing how to configure Eclipse for passable JAXX support (possible).
Advanced animation
Non-pseudoclass animations will be added. For instance, you will be able to create an animation of an image sliding in from the left-hand side of the window and have it triggered whenever the user clicks a certain button.
SWT support
If enough users are interested, SWT support will be added.
Rendering-independent tags
A set of simple tags, like <button> and <textfield> will work equally well in Swing, AWT, and (if supported) SWT. A compiler flag will decide the ultimate rendering technology; the same JAXX file will be able to be compiled for any supported toolkit.
Runtime Stylesheets
Stylesheets are currently applied at compile time and cannot be switched at runtime. Minuet will add the ability to swap or edit stylesheets at runtime (though most likely with only a subset of the compile-time stylesheet features).
More...
Minuet is a good ways off, and will almost certainly expand in scope. The features listed above are just those that I'm pretty sure about -- but they certainly aren't the only ideas.

