Graphic2DオブジェクトをJavaでマウスポインタに正確に追従させるにはどうすればよいですか?

以下のコードでは、単にマウスのリスナーを使用してマウスのXY座標を取得し、次に再描画を呼び出します。ペイント方法の中で私は同じXY座標を使って矩形を描いています。矩形はマウスポインターから離れていますが、マウスポインターから離れています。私は矩形の左上隅がマウスポインタに触れることを期待しています。

私は何か間違っているのですか?

マウスポインタとRectangleオブジェクトの間に距離があるのはなぜですか?

public void mouseMoved(MouseEvent e){
    x = e.getX();
    y = e.getY();

    repaint();
}

public class Canvas extends JPanel{
    Canvas(){}

    public void paint(Graphics g){
        Graphics2D g2 = (Graphics2D)g;
        g2.setPaint(Color.red);
        g2.fillRect(x, y, 50, 50);          
    }
}
3

1 答え

  1. クラスCanvasを呼び出さないでください。その名前のAWTコンポーネントがあるので混乱します。

  2. カスタムペイントは、paint()メソッドではなくJPanelのpaintComponent()メソッドをオーバーライドして行います。

  3. PanelにMouseListenerを追加する場所は表示されません。代わりにフレームに追加している可能性があります。

さらにヘルプが必要な場合は、問題を示す SSCCE を投稿してください。

4
追加された
正解、私はフレームに私のMouseListenerを追加していた。他のアドバイスや情報もありがとう。
追加された 著者 Gary Ryan,