This post on Hyatt's blog, and the ensuing discussion pretty much sums up the problem trying to make a cross-platform application look native. A few quotes:
hyatt:
It's kind of amazing to think that, because of Internet Explorer's dominance, the very way widgets have to be designed in order to avoid bad page layout must necessarily match the way widgets are designed on Windows.
jwz
This argument is interminable, and we've had it since 1994, back when there were actually three platforms (rather than today when there's one platform, plus 1/10th of a platform, and oh, over here there's 1/50th of a platform too.) When someone decides to buy a Brand_X computer, part of their decision in buying it is how it works: people don't buy Windows boxes because they want Macs, nor do people buy Macs because they want Windows.
There's a lot to think about in this for Swing programmers, too. If your application has been laid out on a Windows box, chances are it's going to look wrong on OS X. At worst, you're going to find a lot of widgets fighting for space, and cropping text because the OS X widgets are just that much bigger and rounder than their Windows counterparts.
Even if the layout isn't breaking, you're still not going to look comfortable on the platform because the Apple Human Interface Guidelines are very strict about how applications are laid out. Simple things like that make an application look jarring, and feel uncomfortable to use. Simple things like that are one of the reasons people will always go for a native application over a cross-platform one, or even a ported one (since ports inherit the assumptions of their parent platform).
It's not a problem on Linux, of course, because X users are used to every application looking different. :)