「ルック アンド フィール」を設定することで、アプリケーションの全体的なルック アンド フィールを変更できることを知っています。ルック アンド フィール クラスを作成せずにコンポーネントをグローバルに変更する方法はありますか? たとえば、すべてのボタンを黒くしたい場合、どのようにしますか? 空白を描いています。
ありがとうST
「ルック アンド フィール」を設定することで、アプリケーションの全体的なルック アンド フィールを変更できることを知っています。ルック アンド フィール クラスを作成せずにコンポーネントをグローバルに変更する方法はありますか? たとえば、すべてのボタンを黒くしたい場合、どのようにしますか? 空白を描いています。
ありがとうST
UIManager を使用して、ルック アンド フィールのデフォルトを変更します。http://tips4java.wordpress.com/2008/10/09/uimanager-defaults/に便利なツールがあります。Java Web Start プログラムを実行すると、各コンポーネントのキーと値を参照できます。
ただし、背景を変更するだけでいくつかの新しい問題が発生する可能性があります。次の質問を見てください: Java- スイングの背景色を変更しますか?
1つの解決策は、ファクトリパターンです。
事前定義された設定でボタンを作成するFactoryクラスを作成できます。ボタンが必要なときはいつでもこのファクトリクラスを使用すると、事前定義されたプロパティを持つオブジェクトを取得できます。
Button button = factory.createButton()
class Factory{
Button createButton(){
Button button = new Button();
button.setBackgroundColor(Color.PINK);
return button;
}
}
対応するコンポーネントのコレクションがある場合は、それらをループして BG カラーを設定できます。
public void setBgColor( Color color, List< Component > components ) {
for ( Component c : components ) {
c.setBackgroundColor( color );
}
}
難しいのは、コンポーネントのリストを取得することです。これを行うには、特定のコンポーネント グループをコレクションに登録し、上記の方法を使用してさまざまなプロパティを設定します。このシナリオは、集中型オブジェクト作成の良い議論です。
色だけを変更する必要がない場合はどうなりますか? すべてが制御下にあるアプリケーションの場合、継承を利用するのが理にかなっています。必要なすべてのコンポーネント (パネル、ボタンなど) の基本クラスを作成し、必要に応じて paintComponent メソッドをオーバーライドします。ベース コンポーネントの paintComponent メソッドの動作を、paintComponent メソッドから呼び出される関連する「ペインター」を提供することによってインスタンス化時にカスタマイズできる場合、このアプローチはよりモジュール化される可能性があります。
これは潜在的に役立つリンクです。