0

キャンバスにグラフデータ構造を描画できるJavaアプレットを作成しようとしています。これを行うには、ノードを作成する場所をクリックし、ノードをクリックしてそれらを接続します。paint()問題は、メソッドを正しく動作させることができないことです。mousePressed(MouseEvent e)を使用して、メソッド内のグラフ(およびキャンバス上の正方形)に新しいノードを追加します。

Graphics g = this.getGraphics();
g.setColor(Color.blue);
g.fillRect(e.getX(), e.gety(), 40, 40);

ウィンドウのサイズを変更すると、塗りつぶされた長方形がすべて消えるまで、すべてが正常に機能します。paintメソッドを空のメソッドにオーバーライドしましたが、同じことが起こります。ユーザーがマウスを使用して操作するまで、どの長方形が存在するかわからないため、paint()内にfillRectコマンドを追加できません。

g.fillRect()マウスリスナーメソッド内で使用して、それらを固定するにはどうすればよいですか?

4

4 に答える 4

6

これを正しく読んでいるかどうかはわかりませんが、paint()メソッドが呼び出されたときに、最後のクリックの場所を後でペイントする変数に格納してみませんか?

于 2009-11-26T06:03:19.607 に答える
6

問題は、描画している場所が永続的ではないことです。いつでも、あなたはそれに引き付けたすべてを失う可能性があります。これが発生すると、paint(Graphics)メソッドが呼び出されます。これが発生するたびに画像全体を再描画するか、必要に応じて、アプレットのグラフィックスに描画してコンテンツをコピーするためのキャンバスを確保する必要があります。

画像を作成して描画する方法は次のとおりです。
http://java.sun.com/docs/books/tutorial/2d/images/drawonimage.html

次に、paintメソッドで、GraphicsのdrawImage(...)メソッドを使用して、作成した画像を表示します。

于 2009-11-26T06:11:38.777 に答える
0

ウィンドウサイズ変更アクションリスナーをオーバーライドし、その内部でrepaintを呼び出す必要があります。

于 2009-11-26T06:03:05.707 に答える
0

グラフィックは一時的なものです。領域が汚れると、塗り直されます。

最良の方法は、BufferedImageを作成し、mousePressedでペイントして、repaintを呼び出すことです。
paintが呼び出されたら、渡されたグラフィックスオブジェクトに画像を描画します。このように、長方形を保存する必要はなく、パフォーマンスを向上させるバッファを取得します。

于 2009-11-26T09:07:59.513 に答える