【问题标题】:BlueJ: Cannot find symbol - method addMouseMotionListenerBlueJ:找不到符号 - 方法 addMouseMotionListener
【发布时间】:2015-05-26 04:55:17
【问题描述】:

我正在尝试制作一个绘图程序,该程序将使用 MouseMotionListener 中的 mouseDragged() 方法在画布上绘制圆圈。在我的 init() 方法中,我输入了 this.addMouseMotionListener(this) 并收到了以下错误消息:

找不到符号 - 方法 addMouseMotionListener(Canvas)。

我试图让它每次拖动鼠标时,画笔(只是一个圆圈)都会绘制到上面有画布的绘图板上

这是绘图板的代码:

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

【问题讨论】:

    标签: java mouseevent paint mouselistener


    【解决方案1】:

    您的绘图板需要扩展某种 AWT/Swing 组件,如 Frame、JFRame、Panel 等,其中包含方法 addMouseMotionListener()。因为您不这样做,所以编译器假定 addMouseMotionListener() 是您在类中某处定义的方法。但是他找不到它(因为它不存在)所以它会抛出一个错误。尝试将此方法添加到 Canvas 代码中:

    public void addMouseMotionListener(MouseMotionListener ml){
      canvas.addMouseMotionListener(ml);
    }
    

    然后放

    myCanvas.addMouseMotionListener(this);
    

    进入你的 init() 方法。 因为您正在使用的 Canvas 是一个自定义类(java.awt 包中还有另一个 Canvas),所以您必须更改其代码以支持用户输入(它看起来不像是设计用于执行此操作的)。

    【讨论】:

    • addMouseMotionListener 的参数会是构造函数吗?或者如果我只是将整个 DrawingBoard 类作为参数传递,它是否应该包含构造函数?
    • 因为 DrawingBoard 正在实现 MouseMotionListener,调用 myCanvas.addMouseMotionListener(DrawingBoard); 有效。 DrawingBoard 通过实现它并覆盖它的方法而成为一个 MouseMotionListener。这也适用于所有其他界面。
    • 好的,所以找不到符号错误消失了,但画布不会绘制任何东西。让绘图板扩展 JPanel/JFrame 是否最好?
    • 您没有更新 x/y 变量。您需要在 mouseDragged(MouseEvent e) 中调用 x=e.getX(); y=e.getY() 并将结果传递给您的 Brush 对象。
    • myCanvas.fillCircle(x,y,10);替换b1.draw();
    猜你喜欢
    • 2015-05-13
    • 2015-01-19
    • 1970-01-01
    • 2019-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多