I recommend the following open source tools (we are using them on our Java Swing applications):
- UISpec4J - Non visual testing tool, very good for unit testing/TDD for the GUI application
- Abbot - Is good for functional testing. Also have record & playback
You can use both or either one of them
From the commercial tools in my opinion the best is IBM Rational Functional Tester - it supports Java applications very well. However it is expensive and is focused on the record & replay approach which is not very reliable.