2

メソッドを使用すると、非常に奇妙なことが起こっています。

public void mouseClicked(MouseEvent evt)

クリック数を数え、1 回または 2 回クリックするたびに、(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

正確な問題が何であるかは完全にはわかりませんが、実行中に「モデル」(Polygon/Edge インスタンス) を変更しないでくださいpaintComponent

が(ところで、単に書くことができますpolygonDone)の場合、モデルに新しいものを追加しています。いつ呼び出されるか、何回呼び出されるかを制御できないため、これは悪いように聞こえます。そして、あなたが を呼び出すので、これは最終的に への呼び出しをトリガーし、新しいエッジを作成します...問題はそのコードのどこかにあるに違いありません。でのエッジの作成を停止します。trueif(polygonDone)EdgespaintComponentmouseMovedrepaint()paintComponentpaintComponent

原則として、paintComponentユーザー入力 (MouseEvent、KeyBoard イベント (KeyBindings による)) の場合にのみ、コンポーネントの状態を変更しないでください。

于 2013-03-27T23:14:43.650 に答える