
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:
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.
Right. I learned to use it the right way and having buttons and menus return control instantly while the task runs in the background rocks. It just needs arranging the long running task call and that's all. Swing is great once you get into it a bit more than a simple GUI builder allows you to.