Anyone who has bothered to read this blog more than twice would likely know I like to use Java to build client-side, cross-platform apps, but would also know that I have a bone to pick with Swing, Sun's recommended UI widget toolset for Java apps with GUIs.

In short, Swing stinks. They tried to shoot the moon and make a "look and feel" (which is a well-made phrase) for Java that would act exactly the same no matter what platform was running the app. It's a great idea in theory, and theory's always been Sun's strong suit. Trouble is, when we boot up Windows, we run Windows apps. When we log into Mac OS X, we run Mac apps. Java has not by any stretch dominated the client-side market the way Sun planned, making the OS running the apps relatively inconsequental, and likely never will. The niche for the xplat LaF (look and feel) is, short-run at the very least, "d-e-d dead". People, understandably, want all their apps to look and feel roughly the same, and since they run more native apps than, say, Java, they want their Java apps to seem to be native apps. Until they're running more Java than native, until Java hits that tipping point [that it never will], Java will need to continue to look, act, smell, & eat native.

Instead of moving back to AWT, the Java UI widget set that essentially exposes native UI widgets to Java coders, with native looks, actions, and reactions, Sun decided to make Swing, originally made to look "Java", look native. So now we have a native look built into Swing, itself built on top of AWT which is, you guessed it, based on native widgets. Tell me that's not a little off. Instead of being one step removed from native, you're now emulating native on top of a toolset itself built on a toolset that really does hit native widgets. Boy, I seem to like beating that dying horse.

Anyhow, much longer intro than I wanted, but you get the point if it's your first time here. Of course emulated native never quite acts like real native -- sorta like Asimov's robots that, even when they looked like people, could still trip off a sixth sense in "true humans", and Swing's native looks continue to have real issues that, ironicly, AWT (with its unfortunately small set of widgets) doesn't, like mousewheel issues on Windows or the inability to use brushed metal windows on OS X. In AWT, neither are (the former *never was* a) problems.

Which is why this Javalobby survey drives me crazy.

Everyone has their favorite L&F that they use every time they start a new application. In this week's poll, we'd like to know which ones you guys prefer.

Personally, I prefer the JGoodies ones, especially with the various themes that come with it. What are your favorites?

Look, the answers you get are going to be from Java coders who write quick little apps for in-house or personal use only. Nobody picks a third-party LaF for a large-scale, commercially released, *cross-platform* app unless they want the worst sort of QA/QC testing issues imaginable. Seriously, how many things do you want to have to double-check when your UI isn't working for ten customers running Mac OS X 10.0? The answers are silly -- like the person who answered the Napkin look and feel that I've discussed here before. Its whole raison d'etre is to make a prototype app *look* like a prototype so that your customer doesn't get the psycological impression that you're almost done once you've finished the UI. Nice, but hardly a favorite LaF -- unless you never get to the point that you've actually gotten an app far enough along to entered final testing. Nobody -- and I mean nobody -- should ever have unit tests for their UI run while in Napkin LaF. That's a complete waste.

The right answer for 99.44% of Java coders is one of either Metal or native, by the way.

But the lesson here is that questions like that -- even the original author's answer of JGoodies, which I'd also hesitate to recommend using, though their PlasticXP on WindowsXP (see a theme? Single platform release, trying to look 'more native than native'; why are you using Java anyhow?) doesn't look that bad, for a Java app anyhow -- show a circular problem from which the Java Desktop is going to have a hard time emerging. People writing the apps don't understand Java's strengths nor their customers' expectations for their apps, and until they do, we'll continue to have a hard time even pretending to have the potential to approach that tipping point. The only place even Metal (and now Synth and Ocean), that is, anything *but* native, really could belong is on Sun's own Sun Java Desktop System, where they could potentially make the native look and feel like Java.

Now if I'd just make myself program in my free time instead of blog... And while I'm dreaming, somebody buy me an iPod shuffle.