2012-03-09 20 views
6

スイングコンポーネント(例:JPanel)のすべてのインスタンスのデフォルトの背景ペイントをグラデーションの背景に変更する方法はありますか?それとも、JPanelの拡張機能を作成して、グラデーションで塗りつぶしてから、JPanelの代わりにアプリで使用する必要がありますか?スイングコンポーネントのデフォルトのグラデーションの背景

+0

背景JPanelでこれを行い、他のすべてのJPanelを不透明にする必要はありませんか? –

+0

@HovercraftFullOfEels、これも別のオプションです。しかし、それを他のコンポーネントにも拡張したい場合は、それらのコンポーネントを拡張する必要があると思います。 –

+0

@JeffStorey:おそらく必ずしもそうではありません。不透明をfalseに設定する簡単なファクトリメソッドを使ってJPanelを作成することもできますし、GUI以外のすべてのJPanelを非不透明に設定することもできます。 –

答えて

3

IMHOの場合、Swingコンポーネントをサブクラス化し、グラデーションペインティングを行うためのpaintComponentメソッドをオーバーライドする方が簡単です。そして、あなたが言ったように、アプリケーション全体でこのカスタムコンポーネントを使用します。

すべてのLaFで一貫性がない可能性があるため、UIプロパティを使用するのは難しいことがあります。

+0

私の最初の考えだった。もっと簡単な方法があれば分かりませんでした。特に複数のコンポーネントタイプにグラデーションを適用したい場合は、すべてのコンポーネントをサブクラス化する必要があります。 –

+0

@JeffStorey、その場合は、 'JComponent'をサブクラス化する方が良いかもしれません。 – Moonbeam

+0

複数のコンポーネントタイプにどのように役立つか分かりません。ボタンのバックグラウンドを変更していたとします。ここでJComponentのサブクラス化の仕方はどうですか? –

0

あなたが意図している範囲が完全にはっきりしていません。 クラス(つまり、すべてのJPanelインスタンスが新しいペイントスキームに従うようになっていますか?)またはすべてのコンテナ内のコンポーネント(フレーム内のすべて)を意味しますか?

これは、コンポーネントクラス、ルックアンドフィール、コンポーネントインスタンスベース、paintComponent()メソッド、またはコンポーネントが作成された後に独自のUIクラス(Component.setUIを参照)を提供することによって、そのメソッドを制御できないためにメソッドを上書きできない既存のコンポーネントの標準外観。

overwrite paintComponentアプローチを除いて実装するのは簡単ではありません。ほとんどのアプリケーションでは、単純なアプローチが最高です:)

関連する問題