Does your program run on Mac OS X? If not, it's not a very good comparison.
Never tested it on Mac OS X, but theoretically there should be no troubles.
Java has two or three GUI toolkits if I recall correctly, one of them (Swing?) doesn't use native widgets.
It has two officially supported toolkits, although I have seen other toolkits available by other developers.
The two toolkits are AWT and Swing. AWT is the older one, and has closer ties to native widgets.
Swing is the newer toolkit, using the MVC architecture, allowing for pluggable "look-and-feel"s. The look and feel can be totally custom, or it can include native components to make it look like a native application.
One of the biggest issues the Java team had with AWT was that different OSes sometimes offered features in their native interfaces that others didn't. This meant that the AWT toolkit could only really support features that all OSes had, and features that only some of them had were ignored.
This meant that AWT became a lowest common denominator toolkit with only the most basic controls available. The designers of Java wanted to overcome that limitation, and Swing was born.
Swing's controls totally separate out the application code from the drawing code. This allowed the Java developers to add as much functionality as they wanted to their controls without having to worry about OS limitations or differences.
Java distributions for most platforms also include a native look and feel, which attempts to make Java applications look native to the OS. In the past, yes, they were largely drawn using Java's own 2D APIs, but starting with Java 5 they are increasingly using native controls when possible.
Microsoft and Apple created their own native bindings - which breaks Java's "write once, run everywhere" philosphy. But with newer versions of Java using hardware accelertion for Java 2D and newer versions of Swing using native controls when possible, the differences between using Swing and using a native toolkit is becoming less of an issue.