これまでJava AWTを使用したことがなく、JFrame
を表示し、のすべての子コンポーネントのフォントプロパティを同じ値に設定しました。私はに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
は設定されません。
ありがとう、それは多目的に見えます。 –