
Java Swing comes with "pluggable look-and-feel technology", which essentially boils down to the fact that interfaces can be "skinned" (although this is simplifying a tad) and is therefore, extremely flexible. By default, Java ships with a cross-platform look-and-feel (LAF), which means your apps can look consistent across all platforms, or LAFs that mimic the look of a specific platform, say Windows, for example. However, one of the chief complaints of Java desktop applications is its "look". It basically stems from two issues:
The Windows L&F for Java is horrible. XUL? Just as bad. It's not just how your widgets look, it's also how they work.
Right click on a textbox in explorer. Right click a text box in WMP. Right click a textbox in Office. Right click a text VS.NET. They look slightly different, but they all work the same. Now right click a XUL textbox. Java textbox? All out of place. Completely incosistent context menus. File Browser control? Same problem.
This kind of disparity is very evident when working with unicode and multiple languages. Native widgets that perform the same kind of task work the same way, have the same options. But Java? XUL? Oh no.