如何让paintComponent跟随你的鼠标?

时间:2015-12-17 21:15:59

标签: java graphics2d mousemotionlistener

以下是我所拥有的,我在一个类中有一个paintComponent方法,

public void paintComponent(Graphics g) {
        g2.setPaint(Color.red);
        g2.fillRect(100, 100, 50, 50);
}

我想让那个图形对象(上面)在第二个类中跟随我的鼠标,但我不知道如何在我的第二个类(下面)中调用它,我写了第一个类的构造函数,但我不知道我不知道怎么让它出现在我的画面上。附: 我将mouseMotionListener添加到我的框架

public void mouseMoved(MouseEvent e) {
    GOLDraw g1 = new GOLDraw();//default constructor from the first class
    repaint();
}

请简单解释一下如何调用paintComponent方法,以及为什么(我会尝试理解它,我不太了解遗传等等)。可能是因为我是初学者而且我做错了,经过几个小时阅读api和谷歌后我什么都没发现。

public class GolPresets extends JComponent implements MouseMotionListener{  


    public GolPresets() {

    }

    @Override
    public void mouseDragged(MouseEvent e) {

    }

    Point point;
    @Override
    public void mouseMoved(MouseEvent e){
       point = e.getPoint();
    }


    public void paintComponent(Graphics g) {
            g.drawRect(point.x, point.y, 100, 100);
    }

    public void GUI() {
        JFrame frame = new JFrame("");
        frame.setVisible(true);
        frame.setSize(500, 500);
        frame.add(new GolPresets());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(new GolPresets());
        frame.addMouseMotionListener(this);

    }

    public static void main(String[] args) {
        GolPresets g = new GolPresets();
        g.GUI();
    }

}

2 个答案:

答案 0 :(得分:1)

例如:

Point lastCursorPoint;

public void mouseMoved(MouseEvent e) {
    lastCursorPoint = e.getPoint();
    repaint();
}

public void paintComponent(Graphics g) {
    if (lastCursorPoint != null) {
        g2.setPaint(Color.red);
        g2.fillRect(lastCursorPoint.x, lastCursorPoint.y, 50, 50);
    }
}

答案 1 :(得分:0)

那么,共享州住在哪里?您需要在mouseMoved方法中跟踪光标位置;你应该只重用已经创建的组件(每次都不是新组件)并在其上调用repaint()方法。