だいぶ前のコードを漁っていたら、Look&feelの設定を変えてGUI全体のフォントサイズを指定する方法が見つかりました。
import java.awt.Component; import javax.swing.JComponent; import javax.swing.UIDefaults; import javax.swing.UIManager; import javax.swing.plaf.FontUIResource; public class UiCustomizer { public static void setFontSize(final int fontSize) { UIDefaults defaultTable = UIManager.getLookAndFeelDefaults(); for(Object o: defaultTable.keySet() ) { if(o.toString().toLowerCase().endsWith("font") ) { FontUIResource font = (FontUIResource)UIManager.get(o); font = new FontUIResource(font.getName(), font.getStyle(), fontSize); UIManager.put(o, font); } } } public static void setScrollBarWidth(final int width) { UIManager.put("ScrollBar.width", width); } public static void updateUiAll(JComponent component) { for(Component child : component.getComponents() ) { if(child instanceof JComponent) { JComponent updateComp = (JComponent)child; updateComp.updateUI(); updateUiAll(updateComp); } } } }
setFontSizeをswingコンポーネント作成前に指定すれば、以降に作ったコンポーネントは全て指定したフォントサイズになります。 Look&feelの設定ということでコンポーネントのインスタンスは必要ありません。 mainメソッド開始直後に呼べばOKです。 JTableの行の高さはフォントサイズに連動しないので注意。
スクロールバーの幅を変えるコードも混ざってますね。 それはまぁ、見ての通りです。
すでに作ってあるswingコンポーネントのフォントサイズを変更する場合、setFontSize → updateUiAllの順に呼び出します。 updateUiAllメソッドは子孫のLook&feel全部をアップデートです。 JFrameのUIをアップデートする場合はgetRootPaneを渡します。
個別のコントロールを設定する必要がないのでちょっと楽。 ただし、独自にフォントを設定しているコントロールが混ざっていると、そのコントロールだけフォントサイズが反映されません。