Java Swing – How to change the font size on a JPanel’s TitledBorder

borderfont-sizejavaswingtitle

I need to be able to programmatically change the font size of all the components in my Swing app. I cannot do this in the usual ways (with UIManager or putClientProperty) as I am using the Nimbus look and feel, so am using the following method to increase the font size of each component in my app individually…

private void enlargeFont(java.awt.Component c, float factor) {
    c.setFont(c.getFont().deriveFont(c.getFont().getSize() * factor));
}

The problem I'm having is that I am using a TitledBorder on my JPanel and (predictably) passing my JPanel into the above method doesn't resize the JPanel's border title.

So is there any way I can change the font size on the border? (If I could get the text of the border, I could then create a new TitledBorder (using a bigger font) and then apply it with the JPanel's setBorder() method… but it doesn't seem possible to get the border text(?).

Does anyone have any suggestions on how to solve?

Best Answer

The following worked for me:

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    ((javax.swing.border.TitledBorder) jPanel1.getBorder()).
        setTitleFont(new Font("Arial", Font.ITALIC, 14));

    jPanel1.repaint();
}

I've tested this in NetBeans 6.9.1enter image description here