2011-11-13 14 views
1

私が作っているゲーム(麻雀ソリティア)内でタイルオブジェクトを「ハイライト」して並べ替えようとしています。これを行うには、Rectangle2Dオブジェクトをタイルと同じ位置に描画し、マウスをクリックしたときにそのオブジェクトを表示させようとしています。マウスのクリックで矩形を描く - 表示されない

タイルが選択されたときに動作するようにマウスクリックイベントを取得できますが、何らかの理由でmousePressed関数内にあるときに四角形が描画されません。私は理由を理解できないようです...

ここで私は関連コードを検討しています - 私はそれを必要に応じて拡張することができます!

/* Above this, the positions of tiles are set */ 

if (content[i][y][x].isVisible()) { 

    /* Draws the image to screen at the appropriate location */ 
    graphics.drawImage(image, x*TILEW+TILEW/2+i*TILESKEW, (y+1)*TILEH/2-i*TILESKEW,null); 

} 

/* Represents the area around a tile, so that you can determine 
* whether appropriate area pressed within a tile */ 
final Rectangle2D rect = new Rectangle2D.Double(x*TILEW+TILEW/2+i*TILESKEW,(y+1)*TILEH/2-i*TILESKEW, image.getWidth(null), image.getHeight(null)); 

/* Set colour of border rectangle */  
graphics.setColor(Color.red); 

/* Store positions and sizes of tile objects */       
final int xPos = x*TILEW+TILEW/2+i*TILESKEW; 
final int yPos = (y+1)*TILEH/2-i*TILESKEW; 
final int height = image.getHeight(null)+2; 

/* This works - outside of the mouse event */  
//graphics.drawRoundRect(xPos, yPos, width, height, 7, 7); 

/* Mouse event */ 
addMouseListener(new MouseAdapter() { 

    public void mousePressed(MouseEvent me) { 

      /* Draw the rectangle to the screen -- Doesn't display! */ 
      graphics.drawRoundRect(xPos, yPos, width, height, 7, 7); 
     } 

「グラフィックス」のグラフィックオブジェクトは、関数に渡されます。

public void paintComponent(final Graphics graphics) { ... } 

任意の提案をいただければ幸いです! ご協力いただきありがとうございます!

+1

早いほど良いのヘルプについては、[SSCCE](http://sscce.org/)を投稿してください。 –

答えて

1

あなたのプログラム構造は、通常、paintListenerに渡されるGraphicsオブジェクトを直接操作するMouseListenerを持つべきではないという点では、音が出ません。その理由は、この方法で取得したGraphicsオブジェクトは保持されないためです。通常、MouseAdapter(MouseListenerとMouseMotionListenerの両方)でクラスフィールドを変更し、コンポーネント上でrepaint()を呼び出します。次に、paintComponentは、マウスアダプタによって設定されたフィールドを使用して矩形を描画します。

編集1
たとえば、ここに私のサンプルプログラムを参照してください。drawing-a-rectangle-over-an-existing-graphics-page

+0

ありがとうございました! –

+0

@KristinaElise:あなたはとても歓迎され、あなたのプロジェクトには最高の運があります! –

関連する問題