2013-10-25 242 views
0

我想实现一个图形建模工具。鼠标监听器接口和绘画

Graphics modelling

鼠标点击生成红色顶点。当鼠标从一个顶点拖到另一个顶点时,应绘制一条线。这是我想达到的。但我的代码并没有有效地做到这一点。以下是我的代码和问题

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(); 
} 
} 

但我面临的问题是,当产生mouseClickedEvent,它生成的按下和释放,以及。特别是当使用三个以上的顶点时,会生成错误的行。

我希望只有在顶点上按下时才会绘制线条,然后移动到下一个顶点然后在那里释放。

这个问题怎么解决?

+0

这个想法是错误的,a.m.方式不适合(JAva6/7)在swing中绘画 – mKorbel

+0

@mKorbel,“a.m.”的含义是什么? – Sage

+0

@Sage a.m. ==上面提到的(是合法的blablabla) – mKorbel

回答

1

mouseReleased检查版本的位置,如果它与您的source相同,则您点击没有拖动。您也可以使用此方法完全清除mouseClicked

1

您可以简单地覆盖mouseDragged(MouseEvent e),它是为您的使用而设计的。

+0

这是我第一个想法,但是拖动路径上的每个像素都会调用函数,从而减慢我的程序速度 – user2756339