Java BlueJ:找不到符号-方法addMouseMotionListener
我正在尝试使用MouseMotionListener中的mouseDragged()方法制作一个绘图程序,该程序将在画布上绘制圆。在我的init()方法中,我输入了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
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)代码>