Skip to main content

Matisse: one step closer to cross platform layout nirvana

Posted by zixle on June 10, 2005 at 2:07 PM EDT
Yow, it's been more than a month since my last blog! I intended to write a blog once a week, but, well, finishing up table sorting, JavaOne and Matisse have kept me unbelievably busy in the past month:( I'll blog later about table sorting and other Mustang goodness. In the mean time I wanted to blog about Matisse. Matisse shows work that the NetBeans and Swing teams have been deeply involved in for close to a year (YOW!) now. For those interested there is a long thread on javalobby talking about Matisse. In this blog I'll cover some of the new JDK features that make Matisse possible.

Baseline support

In visual designers paradise all components are aligned nicely along their baseline. For example, labels should be aligned along their baseline with textfields. To date this has been problematic because we haven't provided an API for getting this information, meaning lots of tricks and assumptions. Thankfully we've added this API and it's now part of Mustang. For details read an older blog on baseline layout. Matisse makes extensive use of this API to allow aligning components along their baselines. For details on the API see JComponent.getBaseline and JComponent.getBaselineResizeBehavior .

Preferred Gap

Each of the platforms (JLF, Windows, Gnome and OS X) provides guidelines as to how far apart various widgets should be placed from each other. We wanted the ability to make it easy for developers to honor these guidelines. You can see this in the Matisse demo, as the components gets close enough they snap to a location based on the guidelines of the current look and feel. The API is in the works for mustang and was discussed in a thread on the swing forums.

GroupLayout

So how does all this tie together? Yes, a new LayoutManager called GroupLayout. The LayoutManager offers the ability to align components along their baseline as well as to easily place components using the preferred gap API. GroupLayout itself is, in some ways, a combination of BoxLayout and SpringLayout. It's more constrained than SpringLayout and we are investigating moving it on top of SpringLayout. Later on I'll provide more details of GroupLayout. For those coming to JavaOne we'll cover it the layout roundup talk.

Do we really need to wait for Mustang to use this?

No! We realize it's important for developers to use this on pre 1.6, even pre 1.5 JREs. As such, we've rolled these three pieces into an open source project that runs on 1.4.2, and newer, JREs. The project is under the swing-labs umbrella and is called swing-layout. For more information, including source, head over to its home page.
Related Topics >>