2009-06-17 5 views
1

私はいくつかのボタンを追加しようとしているJPanelを持っています。私はボタンを描くはずのビットマップの背景画像を持っています。私はすべてのボタンの画像を持っています。私は、バックグラウンドが正しいとするためにボタンと間隔で拡大する必要があります。これを行うためのきれいな方法はありますか?これは痛いでしょうか?背景イメージを持つスイングパネルにコンポーネントを効果的に追加するにはどうすればよいですか?

ありがとうございました

答えて

2

最初に、背景画像を持つJPanelは簡単です。 JPanelから独自のパネルを派生させ、Imageフィールドを追加します。 paintComponent()メソッドをオーバーライドして、フィールドに格納されているイメージを使用してdrawImage()を実行します。

2番目のボタン。あなた自身のボタンを派生させ、コンストラクタでイメージを追加し、setIcon()を使用してボタンに配置します。さまざまなボタン状態の画像を追加するには、setPressedIcon()、...などを使用します。

最後にスケーリングは、あなたが望むものが私にはっきりしていません。 drawImage()はイメージの縮尺を変えることができるので問題ありません。リスナーを追加してJPanelのサイズを変更するときに、ボタンの位置を決めることができます。次に、ボタンの位置を変えることができます。x、y値は、パネルの幅と高さの%として計算する必要があります。幅/高さの比率がパネルの比率と同じになるようにボタンを再スケーリングすることさえできます。

はい、それを行うにはきれいな方法があります。

+0

ボタンの位置を変更するためにリスナーを使用するのはなぜですか?適切なLayoutManagerを使用するだけで、この問題が解決され、不自然な再描画の問題を避けることができます – tddmonkey

+0

スケーリングのためです。私はボタンが背景画像に多少関連していると仮定し、背景のサイズに相対的に調整する必要があります。バックグラウンドパネルのサイズにリスナーを使用し、ボタンの位置を再計算することは比較的簡単です。私はすぐにこれを行うレイアウトマネージャーを考えることができません。しかし、私は私の前提が間違っている可能性があることを認めており、その場合、レイアウトマネージャがより良い解決策かもしれません。 –

0

最初に背景画像を持つJPanelは簡単です。 JPanelから独自のパネルを派生させ、Imageフィールドを追加します。 これはわかりましたが、これを2段階にすると問題が表示されます

2番目のフィールドに格納されているイメージを使用してdrawImage()メソッドをオーバーライドしてpaintComponent()メソッドをオーバーライドします。

私にいくつかの例を教えてもらえますか

関連する問題