だいぶ前のコードを漁っていたら、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を渡します。
個別のコントロールを設定する必要がないのでちょっと楽。 ただし、独自にフォントを設定しているコントロールが混ざっていると、そのコントロールだけフォントサイズが反映されません。

