2

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

public void mouseClicked(MouseEvent evt)

我计算点击次数,每次点击或两次点击时,我都会抓取 (x,y) 坐标并将该坐标添加到我的列表中。但是当我检查给定的图片时,我看到添加的坐标也是拖动坐标,即用户用鼠标经过但没有点击或双击的位置。

怎么可能 ?

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

这是图片:关闭多边形

在此处输入图像描述

当我开始画别的东西时:

在此处输入图像描述

意思是,这是同一个多边形,只是这次鼠标经过但没有点击/双击的坐标也被计算在内。

就是我之前的问题。

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

编码 :

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

谢谢

4

1 回答 1

4

我不完全确定确切的问题是什么,但您不应该在paintComponent.

polygonDonetrue(顺便说一句,你可以简单地写),你正在为你的模型if(polygonDone)添加新的。Edges这听起来很糟糕,因为您无法控制何时paintComponent调用,也无法控制调用次数。并且由于在mouseMoved您调用repaint()中,这最终会触发对 的调用paintComponent,创建新的边缘等......问题一定出在该代码的某个地方。停止在paintComponent.

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

于 2013-03-27T23:14:43.650 回答