2011-01-07 12 views
2

"ルックアンドフィール"を設定することで、アプリケーションの全体的なルックアンドフィールを変更できることがわかっています。ルックアンドフィールクラスを作成せずにコンポーネントをグローバルに変更する方法はありますか?例えば、あなたのボタンのすべてを黒にしたいのであれば、これをどうやって行いますか?私は空白を描いている。 STJava Swing - グローバルにパネルをピンクの背景に変更する

答えて

1

一つの解決策は、工場出荷時のパターンとすることができ

おかげ。

定義済みの設定でボタンを作成するFactoryクラスを作成できます。毎回 ボタンが必要です。このファクトリクラスを使用すると、事前定義されたプロパティを持つオブジェクトが取得されます。

Button button = factory.createButton() 

class Factory{ 
Button createButton(){ 
    Button button = new Button(); 
    button.setBackgroundColor(Color.PINK); 
    return button; 
} 
} 
+0

ありがとうございました。私ははっきりしていなかった。私が既存のアプリケーションを持っていて、私のクライアントがボタンのための別の配色をしたいと言ったら。どのように達成できますか? – soulTower

+0

ボタンクラスを同じ名前で拡張することができます。 Buttonはjavax.swing.Buttonを継承し、この新しいクラスのコンストラクタでバックグラウンド値を設定します。ただし、コードを更新して、すべてのjavax.swing.Buttonインポートを新しいクラスに置き換える必要があります。既存のコードのファクトリ方法と比較した、より簡単なリファクタリング – fmucar

4

ルックアンドフィールのデフォルトを変更してください。素晴らしいツールがあります:http://tips4java.wordpress.com/2008/10/09/uimanager-defaults/ Java Web Startプログラムを実行すると、各コンポーネントのキーと値を参照できるようになります。

はしかし、単にいくつかの新たな問題が発生する可能性があります背景を変え、この質問を見てみましょう: Java- Changing swing background colour?

+0

ありがとう、それはちょうど私が探していた読書かもしれません。 – soulTower

0

あなたがそれらをループBG色を設定できた対応するコンポーネントのコレクションを持っている場合。

public void setBgColor(Color color, List<Component> components) { 
    for (Component c : components) { 
     c.setBackgroundColor(color); 
    } 
} 

難しい部分はコンポーネントのリストを取得しています。特定のコンポーネントグループをコレクションに登録し、上記のメソッドを使用してさまざまなプロパティを設定することで、これを実行しました。このシナリオは、集中オブジェクト作成のための良い引数です。

-1

色を変更する必要がある場合はどうすればいいですか?これがすべてあなたのコントロール下にあるアプリケーションであれば、必要なすべてのコンポーネント(パネル、ボタンなど)の基本クラスを作成し、必要に応じてpaintComponentメソッドをオーバーライドして継承を利用することが理にかなっています。 paintComponentメソッドから呼び出される関連する "ペインタ"を提供することで、ベースコンポーネントのpaintComponentメソッドの動作をインスタンス化時にカスタマイズできる場合、このアプローチはよりモジュラになる可能性があります。

Hereは、潜在的に有用なリンクです。

関連する問題