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

时间:2013-03-27 21:55:47

标签: java swing jframe awt mouseevent

当我使用这个方法时,会发生一些非常奇怪的事情:

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 个答案:

答案 0 :(得分:4)

我不确定确切的问题是什么,但您不应在paintComponent期间修改“模型”(多边形/边缘实例)。

polygonDonetrue时(顺便说一下,您只需撰写if(polygonDone)),即可向模型中添加新的Edges。这听起来很糟糕,因为您无法控制何时调用paintComponent,也无法控制它被调用的次数。因为在mouseMoved中你调用repaint(),这最终会触发对paintComponent的调用,创建新的边缘等等......问题必须存在于代码中。停止在paintComponent

中创建边

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