Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java BlueJ:找不到符号-方法addMouseMotionListener_Java_Mouseevent_Paint_Mouselistener - Fatal编程技术网

Java BlueJ:找不到符号-方法addMouseMotionListener

Java BlueJ:找不到符号-方法addMouseMotionListener,java,mouseevent,paint,mouselistener,Java,Mouseevent,Paint,Mouselistener,我正在尝试使用MouseMotionListener中的mouseDragged()方法制作一个绘图程序,该程序将在画布上绘制圆。在我的init()方法中,我输入了this.addMouseMotionListener(this),得到了以下错误消息: 找不到符号-方法addMouseMotionListener(画布) 我试图使它,使每次鼠标被拖动,画笔(这只是一个圆圈),将绘制到绘图板上有画布上 以下是绘图板的代码: import java.awt.*; import java.awt.ge

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

找不到符号-方法addMouseMotionListener(画布)

我试图使它,使每次鼠标被拖动,画笔(这只是一个圆圈),将绘制到绘图板上有画布上

以下是绘图板的代码:

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();
}
画布的代码可在此处找到:

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

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

myCanvas.addMouseMotionListener(this);
进入init()方法。
因为您正在使用的画布是一个自定义类(java.awt包中有另一个画布),所以您必须修改其代码以支持用户输入(它看起来不像是专门为此设计的)。

addMouseMotionListener的参数是构造函数吗?或者,如果我只是将整个DrawingBoard类作为参数传递,它是否应该包含构造函数?因为DrawingBoard正在实现MouseMotionListener,调用
myCanvas.addMouseMotionListener(DrawingBoard)工作。DrawingBoard通过实现它并重写它的方法,可以作为MouseMotionListener。这也适用于所有其他界面。好的,所以“找不到符号”错误消失了,但画布不会绘制任何内容。最好是让DrawingBoard扩展JPanel/JFrame吗?您没有更新x/y变量。您需要调用
x=e.getX();y=e.getY()
在mouseDragged(MouseEvent e)中,并将结果传递给笔刷对象。替换
b1.draw()带有
myCanvas.fillCircle(x,y,10)