This week's book giveaway is in the OCAJP 8 forum. We're giving away four copies of OCA Java SE 8 Programmer I Study Guide and have Edward Finegan & Robert Liguori on-line! See this thread for details.
Swing can be fast for complex apps too -- faster than apps with native components, actually -- if you take advantage of the separable model architecture. For example, if you have a mess of data changes, then it's much faster to make them to the data model (of a table or list, say) and then flush the data out to the component than it is to update the values in the component one by one. Some component architectures don't give you that option.