0

I want the coordinates from the Mouse class to go to the Paint class in the paint method. And that the square moved with the movement of the mouse. But the coordinates are not transmitted.

g.drawRect(mouse.getX(), mouse.getY(), 10, 10);

mouse.getX(), mouse.getY() starts only at the beginning. and after does not change.

Class Draw Points

public class DrawPoints
{
    Frame f;
    KeyBoard key;
    Mouse mouse;
    Paint c;

    public void GUI()
    {
        f = new Frame("DrawPoints");
        f.setSize(300, 300);

        mouse = new Mouse(); // edit

        c = new Paint(mouse); // edit
        c.setSize(300, 300);
        c.setBackground(Color.WHITE);

        c.addMouseListener(mouse);
        c.addMouseMotionListener(mouse);

        key = new KeyBoard();
        c.addKeyListener(key);

        f.add(c);
        f.pack();
        f.setVisible(true);

        f.addWindowListener(new WindowAdapter()
        {
            @Override
            public void windowClosing(WindowEvent e)
            {
                System.exit(0);
            }
        });
    }
}

Class Paint

class Paint extends Canvas
{
    Mouse mouse; // edit

    public Paint() // added
    {
        mouse = new Mouse();
    }

    @Override
    public void paint(Graphics g)
    {
        g.drawRect(mouse.getX(), mouse.getY(), 10, 10);
        repaint(); // added
    }
}

Class Mouse

class Mouse implements MouseListener, MouseMotionListener
{   
    private int x;
    private int y;

    public int getX()
    {
        return this.x;
    }

    public int getY()
    {
        return this.y;
    }

    // MouseMotionListener
    @Override
    public void mouseMoved(MouseEvent e)
    {
        x = e.getX();
        y = e.getY();
        //System.out.println(e.getX() + " " + e.getY());
    }

    @Override
    public void mouseDragged(MouseEvent e)
    {
        System.out.println("mouseDragged");
    }
4

2 回答 2

0

忘记你不应该使用 AWT 库编码这一事实,因为这个 GUI 库已经过时 20 多年了,这不是你进行事件驱动编程的方式,因为你需要通知程序鼠标状态的变化,你的代码没有做的事情。您的鼠标侦听器方法需要更改绘图 Paint 对象中的 x 和 y 属性,然后调用repaint()同一个对象。

于 2018-07-27T13:30:50.173 回答
0

我不知道其他类,但我认为问题是您创建了不同的鼠标对象。将 new Mouse() 移动到 new Paint() 之前,并将 new Paint 更改为 Paint(mouse)。绘图点类:

public class DrawPoints
{
    Frame f;
    KeyBoard key;
    Mouse mouse;
    Paint c;

    public void GUI()
    {
        f = new Frame("DrawPoints");
        f.setSize(300, 300);

        mouse = new Mouse();


        c = new Paint(mouse);
        c.setSize(300, 300);
        c.setBackground(Color.WHITE);
        c.addMouseListener(mouse);
        c.addMouseMotionListener(mouse);

        key = new KeyBoard();
        c.addKeyListener(key);



        f.add(c);
        f.pack();
        f.setVisible(true);

        f.addWindowListener(new WindowAdapter()
        {
            @Override
            public void windowClosing(WindowEvent e)
            {
                System.exit(0);
            }
        });
    }
}}

Paint 类:将 Paint() 更改为 Paint(Mouse mouse) 并将 new Mouses() 行更改为 this.mouse = mouse;

class Paint extends Canvas
{
    Mouse mouse;

    public Paint(Mouse mouse)
    {
        this.mouse = mouse;
    }

    @Override
    public void paint(Graphics g)
    {
        g.drawRect(mouse.getX(), mouse.getY(), 10, 10);
    }
}
于 2018-07-27T13:45:22.060 回答