2013-10-25 3 views
0

그래픽 모델링 도구를 구현하려고합니다. 마우스에마우스 리스너 인터페이스 및 그림

Graphics modelling

빨간색 정점 생성을 클릭합니다. 한 정점에서 다른 정점으로 마우스를 드래그하면 선을 그려야합니다. 이것이 내가 성취하고자하는 바입니다. 하지만 내 코드는 효과적으로하지 않습니다. 내 코드와 문제 mouseClickedEvent가 발생 내가 직면하고있는 문제는 그러나

import java.awt.Color; 
import java.awt.Graphics2D; 
import java.awt.Point; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 
import java.awt.image.BufferedImage; 
import javax.swing.JPanel; 

public class NewClass extends JPanel { 
    Point source,dest; 
    BufferedImage image; 
    Graphics2D imageGraphics; 
    NewClass(){ 
    image= new BufferedImage(400,400, BufferedImage.TYPE_INT_ARGB); 
    imageGraphics=image.createGraphics(); 
     this.addMouseListener(new MouseAdapter(){ 
     @Override 
     public void mouseClicked(MouseEvent e){ 
      if(e.getButton() == MouseEvent.BUTTON1){ 
       Point p=e.getPoint(); 
       paintPoint(p); 
      } 
     } 

     @Override 
     public void mousePressed(MouseEvent e){ 
      if(e.getButton() == MouseEvent.BUTTON1){ 
       source=e.getPoint(); 
      } 
     } 
     @Override 
     public void mouseReleased(MouseEvent e){ 
      if(e.getButton() == MouseEvent.BUTTON1){     
        dest=e.getPoint(); 
        paintLine(); 
      } 
     }  
    }); 
} 
    public void paintPoint(Point r){ 
    imageGraphics.setColor(Color.red); 
    imageGraphics.fillOval(r.x,r.y,5,5); 
    repaint(); 
} 
public void paintLine(){ 
    imageGraphics.setColor(Color.black); 
    imageGraphics.drawLine(source.x,source.y,dest.x,dest.y); 
    repaint(); 
} 
} 

이되어 다음, 그것을 누르면뿐만 아니라 발표 생성합니다. 특히 세 개 이상의 꼭지점이 사용되면 잘못된 선이 생성됩니다.

꼭지점을 눌러서 다음 꼭지점으로 이동 한 다음 그 지점에서 놓아야 만 선을 그립니다.

어떻게이 문제를 해결할 수 있습니까?

+0

이 아이디어가 잘못되었습니다. 스윙에서 페인팅하기에 적합한 방법이 아닙니다. (JAva6/7) – mKorbel

+0

@mKorbel, 'a.m.'은 무엇을 의미합니까? – Sage

+0

@Sage a.m. == 위에서 언급 한 (합법적 인 blablabla) – mKorbel

답변

1

mouseReleased에서 클릭하면 끌기가 아닌 source과 동일한 경우 출시 위치를 확인하십시오. 이 방법을 사용하면 mouseClicked을 완전히 제거 할 수도 있습니다.

1

간단하게 mouseDragged(MouseEvent e)을 무시할 수 있습니다.

+0

그건 내 첫 번째 생각했지만 함수는 드래그 경로에있는 모든 픽셀에 대한 호출되고, 내 프로그램이 느려지고 – user2756339

관련 문제