【问题标题】:Dragged mouse coordinates are also counted while using mouseClicked()?使用 mouseClicked() 时也计算拖动的鼠标坐标?
【发布时间】:2013-03-18 04:59:40
【问题描述】:

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

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

谢谢

【问题讨论】:

  • EdgesPolygon 的课程在给定的链接中(如果您需要它们,它们是小课程)。” 为了尽快获得更好的帮助,请发布@ 987654322@.
  • @AndrewThompson:抱歉,已修复。
  • 嗯.. 源代码中的空行过多是怎么回事?我遍历了 454 (!) 行并删除了多余的空白以产生 379 LOC。
  • @Andrew Thompson:这是我最小的问题 :)

标签: java swing jframe awt mouseevent


【解决方案1】:

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

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

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

【讨论】:

  • 我按照你的建议做了并删除了 public void paintComponent(Graphics g) 中的 this.edges.add(currentEdge); ,但我得到了同样的结果。
  • 最后我用你的评论把它修好了。非常感谢 。 paintComponent 是造成这种混乱的主要原因。
猜你喜欢
  • 2015-09-25
  • 1970-01-01
  • 2022-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-06
  • 1970-01-01
相关资源
最近更新 更多