BlueJ:找不到符号 - 方法addMouseMotionListener

时间:2015-05-25 19:33:09

标签: java mouseevent paint mouselistener

我正在尝试制作一个绘图程序,使用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

1 个答案:

答案 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),您必须更改其代码以支持用户输入(它看起来不像是为了这样做而设计的)。