2011-01-05 2 views
4

私は、ゲームの状態遷移を使用して、ゲームの種類、オプションなどを選択するための複数のビューを持つメニューを持つゲームを作成しています。各メニューは、JFrameCanvasオブジェクト内でアクティブにレンダリングされます。私はキャンバスのBufferedImageを描画することにより、すべてのゲームの状態でアクティブなレンダリングを行っておりますので、私はのJButtonまたはその他ののJComponentまたはコンポーネント(AWT)Graphics2Dオブジェクトは、可能性があるため」を使用することはできませんJavaでSwing以外のボタンを作成するにはどうしたらいいですか?

Graphics2D g = bufferStrategy.getDrawGraphics(); 
g.draw(new JButton("Click me")); 

マウス入力を受け取り、Graphics2Dオブジェクトで描画できるカスタムボタンを実装するにはどうすればよいですか?

+0

全体の画像を描画してメニューを実装していますメニュー?私にとって賢明ではない。 – Qwerky

+0

JButtonにはpaintAll(Graphics g)メソッドが用意されています。ボタンの位置とサイズを設定し、mybutton.paintAll(g)を呼び出すことができます。このメソッドはすべてのコンポーネントに存在します – josefx

+0

あなたにとって賢明なものは何ですか?メニュー画面もアニメーション化したいしたがって、私はメニュー全体を各フレームでレンダリングする必要があります。 – Wagan8r

答えて

1

ドローイングしているコンポーネントにマウスリスナーを追加し、ボタンにしたい領域にマウスがクリックされたかどうかを判断させます。

+0

_MouseListners_は_Component_オブジェクトにのみ追加できます。 _Component_オブジェクトは_Graphics2D_オブジェクトで描画できません。それは私の問題です。 – Wagan8r

+1

キャンバスはコンポーネントです。キャンバスにマウスリスナーを追加します。 – jzd

+0

ありがとう、これは私のためにうまくいきました。 – Wagan8r

0

Swingを使用しているアプリケーションでCanvasを使用する理由(JFrameはSwing)ですか?

BufferedImage image = new BufferedImage(blah....) 
Graphics2D gfx = image.createGraphics(); 
JButton but = new JButton("Click me"); 
but.update(gfx); 

しかし、実際には本当に醜いです!

なぜJPanelを使用しないのですか? Afaikを使用すると、paintメソッドを上書きしてupdateメソッドを呼び出すだけでパネルがクリアされないようにすることができます。次に、updateメソッドの引数として取得したGraphics2Dを使用して要素を描画し、独自のボタンなどを追加することもできます。

+0

これは可能な解決策ですが、アクティブなレンダリングをしたいので、私がしなかったpaint()メソッドによるパッシブレンダリングの使用を意味します。 – Wagan8r

関連する問題