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]의 색상을 변경하고 싶다면, 어떻게해야합니까?

감사합니다.

편집 : 지금이 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]을 그릴 때 dimColors이 [1] 컬러로 설정이 있기 때문에.

그러나 오른쪽 아크가 클릭되었는지 확인하는 방법을 아직 알 수 없습니다. 지금은 그래픽 패널의 아무 곳이나 클릭하면 특정 원호의 색이 바뀝니다

답변

1

예를 들어 호의 색을 변경하려면 어떻게해야합니까?

선 (또는 무엇이든)은 원래 색으로 칠해진 한 묶음의 픽셀로만 존재합니다. 색상을 변경하려면 현재 색상을 변경하고 다시 그려야합니다.

+0

나는 나의 메인 포스트를 편집했다. 고맙습니다. 지금은 아크를 다시 그릴 수 있지만, 클릭 한 것을 확인하는 방법을 모르겠습니다 ... 어떤 생각이 있습니까? 감사! – zeta

+2

다른 질문입니다. –

3

이것은 이전 질문에 대한 대답이 아니지만 클릭 감지에 대한 질문에 대한 답변입니다. 이렇게하려면 대부분의 다른 옵션보다 쓰기가 훨씬 쉽기 때문에 Graphics2D를 사용하는 것이 가장 좋습니다. 예를 들면 다음과 같습니다.

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

먼저 Graphics2D 직사각형 rect를 만듭니다.

 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) 메서드를 사용하여 생성 한 사각형에 사용자의 클릭 위치가 포함되어 있는지 확인하기 만하면됩니다. 그게 다야!

관련 문제