
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:
I personally can't stand wxWidgets apps. The may use some native widgets, but that doesn't make them behave anything like native apps. They always seem to have the wrong widget spacing, the wrong widget placement, and the wrong icons on the buttons. They also do not make very good use of the platform's features. They look enough like a native app to get your hopes up, but when you try to use it you realize that it is all wrong.
Personally the way that AbiWord handles cross platform GUIis is the best. It may be more work, but you end up with something that is actually useable on all of the platforms.