0

マウスを動かしたときに drawString() メソッドを使ってマウス座標を表示したい。これが私の現在のコードです。これは、mouseClicked(MouseEvent e) メソッドでは機能しますが、mouseMoved(MouseEvent e) メソッドでは機能しません。誰かがこれで私を助けてくれますか?

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Test extends JFrame {

    public Test() {
        PaintLocaion paintlocation = new PaintLocaion();
        paintlocation.setSize(400,300);
        add(paintlocation, BorderLayout.CENTER);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);       
    }

    public static void main(String[] args) {
        new Test().setVisible(true);
    }

    private class PaintLocaion extends JPanel {
        int x, y;

        public PaintLocaion() {          
            addMouseListener(new MouseAdapter() {
                @Override
                public void mouseMoved(MouseEvent e) {
                    x = e.getX();
                    y = e.getY();
                    repaint();
                }
            });
        }      

        @Override
        public void paint(Graphics g) {
            super.paint(g);
            g.fillRect(0, 0, this.getWidth(), this.getHeight());
            g.setColor(Color.white);
            g.drawString(x + ", " + y, 10, 10);
        }
    }     
}
4

2 に答える 2

4

を登録する代わりに、 ...MouseListenerを登録する必要があります。MouseMotionListener

public PaintLocaion() {          
    addMouseMotionListener(new MouseAdapter() {
        @Override
        public void mouseMoved(MouseEvent e) {
            x = e.getX();
            y = e.getY();
            repaint();
        }
    });
}      

詳細については、マウスモーション リスナーの作成方法を参照してください。

mKorbel によるコメントから更新

オーバーライドpaintには問題があります。これは論理的なことのように思えるかもしれませpaintんが、再描画が発生したときにメソッドによって更新された領域開始が更新されない可能性があり、奇妙な描画の問題が発生する可能性があります。

代わりに使用することをお勧めしますpaintComponent

上部のコンポーネントをペイントしようとしている場合は、代わりにガラス板またはJXLayer/を使用することを検討してください。JLayer

ペイント プロセスの詳細については 、AWT と Swingでのペイントを参照してください。ガラス ペインの詳細については、ルート ペインの使用方法と、JLayer クラスを使用してコンポーネントを装飾する方法を参照してください。

于 2013-08-19T07:50:35.037 に答える
2

http://docs.oracle.com/javase/tutorial/uiswing/events/mousemotionlistener.htmlを使用してみることができますMouseMotionListener

于 2013-08-19T07:51:08.260 に答える