Been using java for years and never figured out a good way to make a real GUI. Their official GUI style code places buttons/objects in weird ways. There is a cardinal system method, where you say button A goes north, text field B goes west, etc, which van be very limited. There are some other ways like placing objects left to right, or wrapping around. Generally i dont like the lack of control on object placement. I wish there was an option like put button C at coordinates 300,150 , but I have not figured out an easy way to do that...
Read stuff like http://www.macs.hw.ac.uk/guidebook/?name=Layouts&page=1
and the use of the setLocation method for components for absolute positioning.
You can place things in absolute positions with absolute size but this sucks in practice as it relies on people having a screen resolution like yours (and their mobile phone may not be the same resolution as your computer). With rubber-banded components in Layouts (rather than absolutes) means that you can resize windows and the components adapt to the window size. So its a hassle but also a benefit. Good/correct/flexible GUI design isn't easy in any language!!!
There are lots of layouts to achieve what you are after: GridBag layout is the most flexible but most complex to use.
There are lots of GUI designer apps out there and some IDEs including Eclipse have plug ins to give a VB like drag'n'drop WYSIWYG interface for those who feel more comfortable with that way of working.
@Admin Java doesn't have an inherent issue with COM ports in that they are not directly supported! This is because it can run on Win/Mac/Unix etc and the old serial libs weren't flexible enough to cover all platforms so they were dropped. However: there are 3rd party extension like RxTxComm that work brilliantly and I have used in both my Blackfin console and Gait Designer java programs. Both of these use 'buttons that I can push that send commands to the serial port'.
Java is actually quite fast and flexible nowadays - for example it is even used by lots of folk for streaming real time media feeds including TV feeds. High band width.
But like all languages - its easy to write bad code that still works. The biggest culprit, being an OO language, is bad object design and wastefull heap usage that requires lots of garbage collection. And that is where the 'skill' lies (as the high $ pay check !) - writing good/efficient code.
Java lets you get stuff going quickly, cross platform, but it will NOT turn your bad program into a master piece!
However: Java is also now quite complex. The standard language is still fairly 'tight' but there are now so many frameworks built on top of it like Hibernate (for databases), Spring (for runtime configurability and more), Struts, Portlets, Grails (for web apps), EJBs (for running different bits of your app on different servers) etc etc. Each being libraries written in Java, on top of Java, to make life 'easier' for those not wanting to re-invent the wheel. All very nice and flexible but a bit daunting for the beginner.
Personally I like Java (I use it professionally for big database applications) because of its Java Web Start technology. This means that my Board Designer, Project Designer and Gait Designer applications can be released onto my server and every time someone runs it then it automatically downloads the latest version if there is one. So if people report bug then I dont have to ask 'what version are you running' etc - nor package an installer for every minor fix. It probably also has the largest reservoir of 'open source' tools/apps of any language.