2017-01-14 10 views
0

私はキャンバス上に線を描くことを可能にする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

GraphicsProgramクラスは実行可能オブジェクトを実装していますか? –

答えて

0

最初のプログラムがしか初期化されていないintフィールドはゼロに初期化されているので、1 GLineを作成し、常に(0,0)から(0,0)までです。プレスイベントとドラッグイベントでは、変数x1、y1、x2、y2を更新しますが、これらの値は何もしません。

すべてのドラッグイベントは、描画する行のリスト/セットにline(元の(0,0) - (0,0)行)の別の参照を追加します。

関連する問題