以前は Java AWT を使用したことがありませんでしたが、すべての子コンポーネントJFrame
の font プロパティを表示して同じ値に設定するコードを手に入れました。プロパティを1 か所だけに設定したい。これどうやってするの?
.NET/WinForms では、子コントロールは親コントロールから継承するため、Form
インスタンスのフォントを設定してすべてのコントロールに伝播させるだけで十分です。予想外に、これは AWT には当てはまらないようです。
次の小さなコードは、すべてのコンポーネントのフォントを再帰的に設定します。
private void setFontForAll(JFrame f, java.awt.Font font) {
f.setFont(font);
setFontRecursive(f.getContentPane().getComponents(), font);
}
private static void setFontRecursive(Component[] components, java.awt.Font font) {
for (Component c : components) {
c.setFont(font);
if (c instanceof java.awt.Container)
setFontRecursive(((java.awt.Container)c).getComponents(), font);
}
}
ただし、次の 4 つの欠点があります。
- 入れ子になったレイアウト パネルを含む大きなフォームでは、実際には非常に非効率的な余分なコード。
- コードは非汎用です。将来、別のプロパティに対して同じことを行う必要がある場合は、メソッドを書き直す必要があります (または、簡潔さを犠牲にしてより一般的なものにリファクタリングする必要があります)。
- 使用法は非宣言的です。つまり、宣言的な方法ではなく、フォーム作成の最後 (すべての子コンポーネントが初期化および追加された後) に呼び出す必要があります。
- うまくいきません。コンポーネントは正しく設定されていますが、すべてがコンポーネントであるとは限りません。たとえば、
TitledBorder
の はJPanel
設定されません。