
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 fact is developing a Swing application does not give you good performances for free. You have to know how Swing works.
That's not the programmer's problem. They can get better peformance from other tookits for free without any extended effort. Swing is slow before you even start.
Myrd: Blaming Java application for not looking perfectly native on MacOS X is not relevant I think. First, remember that Java needs to cope with multiple platforms and it cannot, at least easily, offer a perfect look and feel on each of them and still bring you the portability you would expect.
Qt has managed it. It's never going to be perfectly native, but it's good enough in terms of integration and as long as it looks good it's fine. SWT and Eclipse don't look exact, but they look good enough and integrate enough in terms of colour.
Java applications do not run slowly, they APPEAR to run slowly when they have a GUI, because of some misunderstanding of the Swing API (which, I reckon, is sometimes hard to use). Seriously this is due to how the toolkit is used.
Again, not a programmer's issue. This doesn't happen with other toolkits.