Swing is a very powerful and flexible user interface toolkit. In my experience, this flexibility is not well utilized in most production software. For example, components such as JTables and JTrees are frequently used as they are provided, with some customization of the underlying model, or a slight customization of the behavior.

There are a number of very good examples available of more extensive customization of Swing components. Some examples, which also make generally good reading, are: