2011-12-02 4 views
0

나는 페인트 사각형 (_rect)을 저장할 벡터 (_storedShapes)를 가지고 있습니다. 또한 타원 추가 계획도 있습니다. 내가 뭘 하려는지 내가 클릭하고 크기를 조정할 수있는 화면의 자리에 모양을 추가하는 것입니다. 여기에 무엇을하려고하는지에 대한 데모가있는 웹 사이트가 있습니다 http://code.google.com/p/tangram-canvas/downloads/detail?name=TangramCanvas-1.2.zip.그림 캔버스에서 모양 조작을 구현하는 방법은 무엇입니까?

이 데모와 유일한 차이점은 내 모양을 드래그 할 때 가운데에서 모든면으로 확장되기를 원합니다.

내 코드에서 미리 클릭 한 사각형이 클릭 한 캔버스에서 팝업 한 다음 드래그 할 때 화면의 커서를 따라갑니다.

private class DrawSListener extends MouseAdapter { 

    public void mousePressed(MouseEvent e) { 
     _preX = (int) (_rect.getX() - e.getX()); 
     _preY = (int) (_rect.getY() - e.getY()); 
     DrawingPanel dp = new DrawingPanel(); 
     _rect = new SketchyRectangle(dp); 
     System.out.println("new rec"); 

    // if (_rect.contains(e.getPoint())) { 
      _rect.setLocation(e.getX(), e.getY()); 
      System.out.println("setLocation"); 
      repaint(); 
      System.out.println("paint"); 
     //} 
    } 
} 

/** 
* Private class DrawListener is called when the DrawEllipse or DrawRectangle radio buttons are selected. 
* 
*/ 

private class DrawListener implements MouseMotionListener { 

    public void mouseDragged(MouseEvent e) { 
     if (_rect.contains(e.getPoint())) { 
      _rect.setLocation(_preX, _preY); 
      _storedShapes.add(_rect); 
      repaint(); 
     } 
    } 
    @Override 
    public void mouseMoved(MouseEvent e) { 
     // TODO Auto-generated method stub 
    } 
} 
+0

무엇이 문제입니까? – GETah

답변

0

개체에 두 좌표 (또는 의미가있는 모든 위치)를 유지합니다. prevDragCoord, shapeCenter. 마우스 클릭시 두 멤버의 이벤트 좌표를 저장합니다. 마우스 드래그에서 현재 이벤트 좌표와 개체에 저장된 좌표를 뺀 값을 추가하여 사각형 크기를 업데이트합니다. shapeCenter 멤버와 사각형 크기를 2로 나눈 값의 차이 (예 : shapeCenter.x - rect.xLength/2)를 설정하여 사각형의 위치를 ​​설정합니다. 객체의 좌표 멤버에 현재 좌표를 저장하면 이후의 핸들러 호출시 업데이트 할 준비가됩니다.

구현을 맡겨 두겠습니다. 어쩌면 하나의 변수 만 사용하거나 변수를 사용하지 않을 수 있습니다. 이벤트 객체에 일종의 멋진 데이터가 있기 때문입니다. 이것은 어쨌든 일반적인 아이디어 여야합니다.

관련 문제