简单的图形交互性

时间:2017-01-14 18:11:08

标签: java graphics

我正在尝试编写一个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; 
} 

1 个答案:

答案 0 :(得分:0)

第一个程序只创建一个GLine,因为未初始化的int字段初始化为零,所以总是从(0,0)到(0,0)。在按下事件和拖动事件时,它会更新变量x1,y1,x2,y2但从不对这些值执行任何操作。

每个拖动事件都会将line(原始(0,0) - (0,0)行)的另一个引用添加到要绘制的列表/行集。