
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:
...because at the end of the day the fonts look like crap. There is no getting around that. Ok, maybe if you're on a CRT and have bad vision, but until 1.6 gets subpixel rendering in, Swing just doesn't cut it.
Let's face it. Swing is a huge blunder by Sun when they could've at least tried to use native fonts