我正在尝试制作一个绘图程序,使用MouseMotionListener中的mouseDragged()方法将圆绘制到画布上。在我的init()方法中,我输入this.addMouseMotionListener(this)
并收到此错误消息:
找不到符号 - 方法addMouseMotionListener(Canvas)。
我试图这样做,以便每次拖动鼠标时,画笔(只是一个圆圈)将绘制到其上有画布的DrawingBoard
以下是DrawingBoard的代码:
import java.awt.*;
import java.awt.geom.*;
import java.awt.PointerInfo;
import java.awt.MouseInfo;
import java.awt.event.MouseMotionListener;
import java.awt.event.MouseEvent;
public class DrawingBoard implements MouseMotionListener
{
private Canvas myCanvas;
private Brush myBrush;
private PointerInfo a = MouseInfo.getPointerInfo();
private Point p = a.getLocation();
private int x = (int)p.getX();
private int y = (int)p.getY();
private Brush b1 = new Brush(x, y, 10, Color.red, myCanvas);
// instance variables - replace the example below with your own
public void init() {
this.addMotionListener(this);
}
public DrawingBoard(int canvasSizeX, int canvasSizeY)
{
myCanvas = new Canvas("Drawing Board", canvasSizeX, canvasSizeY);
myCanvas.setVisible(true);
myCanvas.setForegroundColor(Color.lightGray);
}
public void mouseMoved(MouseEvent e) {
}
public void mouseDragged(MouseEvent e) {
b1.draw();
}
Canvas的代码可以在这里找到: http://pastebin.com/RzMpkKhy
答案 0 :(得分:0)
您的DrawingBoard需要扩展某种类型的AWT / Swing-Component,如Frame,JFRame,Panel等,其中包含addMouseMotionListener()方法。因为你不这样做,编译器假定addMouseMotionListener()是你在类中某处定义的方法。但是他无法找到它(因为它不存在)所以它会引发错误。尝试将此方法添加到Canvas代码:
public void addMouseMotionListener(MouseMotionListener ml){
canvas.addMouseMotionListener(ml);
}
并放
myCanvas.addMouseMotionListener(this);
进入你的init()方法。 因为您使用的Canvas是一个自定义类(java.awt包中有另一个Canvas),您必须更改其代码以支持用户输入(它看起来不像是为了这样做而设计的)。