MouseMotionListener 不会将坐标传输到 Canvas
MouseMotionListener does not transfer coordinates to the Canvas
我希望鼠标 class 的坐标转到绘画方法中的绘画 class。并且正方形随着鼠标的移动而移动。但是坐标传不出来
g.drawRect(mouse.getX(), mouse.getY(), 10, 10);
mouse.getX(), mouse.getY() 只从头开始。之后不变。
Class 画点数
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 绘画
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鼠标
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");
}
忘记您不应该使用 AWT 库进行编码,因为这个 GUI 库已经过时 20 多年了,这不是您进行事件驱动编程的方式,因为您需要通知程序鼠标状态的变化,你的代码不会做的事情。您的鼠标侦听器方法需要更改绘图 Paint 对象中的 x 和 y 属性,然后在同一对象上调用 repaint()
。
我不知道其他 classes 但我认为问题是您创建了不同的鼠标对象。将 new Mouse() 移动到 new Paint() 之前,并将 new Paint 更改为 Paint(mouse)。
抽签点 class:
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 class:将 Paint() 更改为 Paint(Mouse mouse) 并将新的 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);
}
}
我希望鼠标 class 的坐标转到绘画方法中的绘画 class。并且正方形随着鼠标的移动而移动。但是坐标传不出来
g.drawRect(mouse.getX(), mouse.getY(), 10, 10);
mouse.getX(), mouse.getY() 只从头开始。之后不变。
Class 画点数
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 绘画
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鼠标
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");
}
忘记您不应该使用 AWT 库进行编码,因为这个 GUI 库已经过时 20 多年了,这不是您进行事件驱动编程的方式,因为您需要通知程序鼠标状态的变化,你的代码不会做的事情。您的鼠标侦听器方法需要更改绘图 Paint 对象中的 x 和 y 属性,然后在同一对象上调用 repaint()
。
我不知道其他 classes 但我认为问题是您创建了不同的鼠标对象。将 new Mouse() 移动到 new Paint() 之前,并将 new Paint 更改为 Paint(mouse)。 抽签点 class:
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 class:将 Paint() 更改为 Paint(Mouse mouse) 并将新的 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);
}
}