2013-03-27 66 views
2

東西很奇怪的是發生在我使用的方法:使用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

回答

4

我不能完全肯定的具體問題是什麼,但你不應該修改你的「模型」(多邊形/邊實例)期間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