我正在尝试编写一个GraphicsProgram,允许用户在画布上绘制线条。按下鼠标按钮可设置线的起点。随着拖动的进行,拖动鼠标会移动另一个端点。释放鼠标可将线固定在当前位置,并准备开始换行。
有人可以解释为什么当我运行代码时,无法显示行,而且我所附的正确代码也是如此。
我的代码:`
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;
}
答案 0 :(得分:0)
第一个程序只创建一个GLine
,因为未初始化的int
字段初始化为零,所以总是从(0,0)到(0,0)。在按下事件和拖动事件时,它会更新变量x1,y1,x2,y2但从不对这些值执行任何操作。
每个拖动事件都会将line
(原始(0,0) - (0,0)行)的另一个引用添加到要绘制的列表/行集。