使用mouseClicked()时,还会计算拖动的鼠标坐标?

问题描述:

东西很奇怪的是发生在我使用的方法:使用mouseClicked()时,还会计算拖动的鼠标坐标?

public void mouseClicked(MouseEvent evt) 

我指望每次我有一个点击或两次点击时间的点击数,并 我抢(X,Y)坐标将该坐标添加到我的列表中。 但是,当我检查给定的图片,我看到添加的坐标也拖累坐标,即,其中用户用鼠标过去了,但没有 位置打一个单击或双击。

怎么会是这样?

这个问题与我以前关于多边形的问题有关,这个问题似乎是我的问题的原因。

下面是图片:关闭一个多边形

enter image description here

,当我开始画别的东西:

enter image description here

意思是,这是相同的多边形,仅此计算鼠标移动的坐标时间,但没有点击/双击,也计算在内。

that's我以前的问题。

任何想法会对问题的根源将不胜感激。

代码:

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Graphics; 
import java.awt.Point; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 
import java.awt.event.MouseMotionListener; 
import java.util.ArrayList; 
import java.util.Iterator; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 


/** 
* 
* @author X2 
* 
*/ 
public class Poly 
{ 
    public static void main (String[] args) 
    { 
    JFrame frame = new JFrame("Draw polygons"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setContentPane(new DrawingPanel()); 
    frame.pack(); 
    frame.setVisible(true); 
} 
} 

感谢

+1

*“Classes'Edges'和'Polygon'在给定的链接中(如果你需要它们,它们是小类)。”*为了更好地帮助,请发布[SSCCE](http://sscce.org /)。 – 2013-03-27 22:08:09

+1

@AndrewThompson:对不起,修正了。 – ron 2013-03-27 22:34:05

+1

嗯..什么是来源的空白行过多?我通过了454(!)行,并删除了多余的空白空间以产生379 LOC。 – 2013-03-28 01:22:35

我不能完全肯定的具体问题是什么,但你不应该修改你的“模型”(多边形/边实例)期间paintComponent

polygonDonetrue(顺便说一句,你可以简单的写if(polygonDone)),您要添加新的Edges到模型。这听起来很糟糕,因为你在paintComponent被称为不控制,也不是调用多少次。而且,由于在mouseMoved你打电话repaint(),这将最终触发呼吁paintComponent,创造新的优势,等等的问题必须在代码的某处。在paintComponent停止创建边缘。

作为一般规则,在用户输入(MouseEvent,KeyBoard事件(通过KeyBindings))时,绝不应在paintComponent期间修改组件状态。

+0

我照你的建议做了,并且在'public void paintComponent(Graphics g)'中删除了'this.edges.add(currentEdge);'但我得到了同样的结果。 – ron 2013-03-28 05:49:14

+0

最后,我使用你的评论来修复它。非常感谢 。那个'paintComponent'是造成这个混乱的主要原因。 – ron 2013-03-28 13:43:20