 <p>Instead of writing your own recursive code, maybe you can just treat this like a LAF change and just invoke:</p> <pre><code>SwingUtilities.updateComponentTreeUI(frame); </code></pre> <p>See the section from the Swing tutorial on <a href="http://docs.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html#dynamic" rel="nofollow">Changing the LAF</a>.</p> <p>Also, there is no need to invoke revalidate() and repaint() in your code. The setFont(...) method will invoke those methods automatically. </p>