2011-11-20 6 views
0

私はこれまでのところ同様の質問をしましたが、回答は得られませんでした。元の質問は、クリックした後にシェイプの色を変更することでした。しかし、私はそれが描画された後の形にアクセスする方法に困惑しています。描画後の色はjava.awt.Graphicsで変更されます

これは私のpaintComponentメソッド

@Override 
protected void paintComponent(Graphics graph) { 
    super.paintComponent(graph); 
    Graphics2D g = (Graphics2D) graph; 
    // smooth graphics 
    g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 

    // moving to the middle of the panel 
    g.translate(this.getWidth()/2, this.getHeight()/2); 

    // painting colored arcs 
    for(int i = 0; i < 4; i++) { 
     g.setColor(dimColors[i]); 
     g.fill(arcs[i]);    
    } 

    // painting borders 
    g.setColor(Color.BLACK); 
    g.setStroke(new BasicStroke(5F)); 
    g.drawLine(-98, 0, 98, 0); 
    g.drawLine(0, -98, 0, 98);  
    g.draw(circle);  

    // painting central white circle 
    g.setColor(Color.WHITE); 
    g.fill(smallCircle);   
    g.setColor(Color.BLACK); 
    g.draw(smallCircle);  

} 

ある弧[]配列は、パネル上に描画されているARC2D年代の束が含まれています。私の質問は今、アーク[0]のような色を変更したいのですが、どうすればいいですか?

ありがとうございます!

EDIT:それを描画するときにアークが[1] dimColorsは、[1]色として設定しているので、私は今、このMouseAdapterのイベントに

 private class MyMouseAdapter extends MouseAdapter { 
    public void mousePressed(MouseEvent e) { 

     Point p = e.getPoint(); 
     Component c = getComponentAt(p); 

     Graphics g = c.getGraphics(); 

     dimColors[1] = Color.RED; 

     paintComponent(g); 

    } 
} 

を持っており、それは動作しますが、それは、[1]アークの色を変更します。

しかし、右の円弧がクリックされたかどうかを確認する方法はまだ分かりません。今すぐグラフィックパネルのどこかをクリックすると、その円弧の色が変わります

答えて

1

アーク[0]などの色を変更したい場合、どうすればいいですか?

元の色で塗りつぶされたピクセルの束としてしか存在しません。色を変更するには、現在の色を変更して再度描画する必要があります。

+0

私のメインポストを編集しました。ありがとう、私は今、アークを再描画することができますが、私はまだクリックしたものをチェックする方法はわかりません...あなたは何か考えていますか?ありがとう! – zeta

+2

これは別の質問です。 –

3

これはあなたの以前の質問には答えませんが、クリック検出の質問には答えます。これを行うには、Graphics2Dを使用することをお勧めします。他のほとんどのオプションよりも書く方が簡単なためです。次に例を示します。

 public class GraphicsPanel extends JPanel implements MouseListener 
    { 
      private Rectangle2D rect; 

まず、Graphics2D矩形矩形を作成します。

 public void paintComponent(Graphics g) 
     { 
      super.paintComponent(g); 
      Graphics2D g2d = (Graphics2D)(g); 
      g2d.setColor(Color.GREEN); 
      rect = new Rectangle2D.Double(70, 70, 100, 100); 
      g2d.fill(rect); 
      this.addMouseListener(this); 
     } 

次に、paintComponentメソッドをオーバーライドし、新しいRectangle2D.Doubleオブジェクトを作成します。 次に、g2d.fill()で矩形を塗りつぶし、マウスリスナーをJPanelに追加します。

 public void mousePressed(MouseEvent e) 
      { 

       if(rect.contains(e.getX(), e.getY())) 
        System.out.println("Rectangle clicked"); 
      } 
    } 

最後に、その矩形にユーザーがクリックしたポイントが含まれているかどうかを確認する必要があります。これを行うには、作成した矩形に、Rectangle2D.doubleのcontains(int x、int y)メソッドを使用してユーザーのクリック位置が含まれているかどうかを確認します。それでおしまい!

関連する問題