
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 think this whole native look and feel debate boils down to a simple lack of understanding about the difference between Application development and UI design.
Developers want a tool kit that will allow them to through something together and have it look as polished as a well designed Apple or Microsoft application.
Well it just isn't going to happen, no matter how good the tool kit. If you want good design, hire a designer.
These are two separate and important disciplines.