当我使用这个方法时,会发生一些非常奇怪的事情:
public void mouseClicked(MouseEvent evt)
我计算点击次数,每次点击或点击两次, 我抓住(x,y)坐标并将该坐标添加到我的列表中。 但是当我检查给定的图片时,我看到添加的坐标也是拖动的坐标,即用户用鼠标传递的位置,但没有 点击或双击。
怎么会这样?
这个问题与我之前关于多边形的问题有关,这个问题似乎是我的问题的原因。
以下是图片:关闭多边形
:
当我开始绘制其他内容时:
意思是,这是相同的多边形,只有这次鼠标行进的坐标但是没有点击点击/双击的坐标也被计算在内。
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);
}
}
谢谢
答案 0 :(得分:4)
我不确定确切的问题是什么,但您不应在paintComponent
期间修改“模型”(多边形/边缘实例)。
当polygonDone
为true
时(顺便说一下,您只需撰写if(polygonDone)
),即可向模型中添加新的Edges
。这听起来很糟糕,因为您无法控制何时调用paintComponent
,也无法控制它被调用的次数。因为在mouseMoved
中你调用repaint()
,这最终会触发对paintComponent
的调用,创建新的边缘等等......问题必须存在于代码中。停止在paintComponent
。
作为一般规则,您不应仅在用户输入(MouseEvent,KeyBoard事件(通过KeyBindings))时在paintComponent
期间修改组件状态。