我正在尝试编写一个允许用户在画布上绘制线条的图形程序。按鼠标按钮可设置线条的起点。拖动鼠标会在拖动过程中移动另一个端点。释放鼠标会将行固定在其当前位置,并准备开始新行。
有人可以解释为什么当我运行代码时无法显示行,以及我也附加的正确代码如何使其更可取。
我的代码:'
import acm.program.*;
import java.awt.event.MouseEvent;
import acm.graphics.*;
public class DrawLines extends GraphicsProgram{
public void init(){
addMouseListeners();
line=new GLine(x1,y1,x2,y2);
}
public void mousePressed(MouseEvent e){
x1=e.getX();
y1=e.getY();
}
public void mouseDragged(MouseEvent e){
x2=e.getX();
y2=e.getY();
add(line);
}
private GLine line;
private int x1;
private int y1;
private int x2;
private int y2;
}
正确的代码:
import acm.graphics.*;
import acm.program.*;
import java.awt.event.*;
/** This class allows users to drag lines on the canvas */
public class RubberBanding extends GraphicsProgram {
public void run() {
addMouseListeners();
}
/** Called on mouse press to create a new line */
public void mousePressed(MouseEvent e) {
double x = e.getX();
double y = e.getY();
line = new GLine(x, y, x, y);
add(line);
}
/** Called on mouse drag to reset the endpoint */
public void mouseDragged(MouseEvent e) {
double x = e.getX();
double y = e.getY();
line.setEndPoint(x, y);
}
/* Private instance variables */
private GLine line;
}
第一个程序只创建一个GLine
,因为未初始化的int
字段初始化为零,所以总是从 (0,0) 到 (0,0)。 在新闻事件和拖动事件上,它会更新变量 x1,y1、x2,y2,但从不对这些值执行任何操作。
每个拖动事件都会将另一个 line
引用(原始 (0,0)-(0,0) 行)添加到要绘制的列表/行集。