
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 anti aliased text provided by Java until version 1.5 is awful because it does not allow to do subpixel anti aliasing (or ClearType or whatever). It should be available in Java 1.6 though and this will definitely help.
And Firefox and Thunderbird do not totally succeed in looking and feeling like native applications. On my P4 1.6 Ghz laptop, FF/TB menus are not as responsive as in other applications for instance.