2014-12-09 55 views
0

我有一個愚蠢的bug,我不能在Java開發的Paint-like應用程序中弄清楚。我現在的問題是,當我繪製形狀(比方說矩形)時,矩形應該在所有4個方向上繪製(無論何種方式都被拖動),但現在只能在右下方向上繪製它。我編碼它是所有方向。雖然找出錯誤,我意識到,當你拖動左 - 初始x和y取x2,y2的值。我不知道爲什麼它發生,因爲我沒有代碼是這樣做的。請幫幫忙,我一直在對這個bug整夜((在自制塗料應用程序中繪製錯誤

這個類是負責所有的形狀

public abstract class DrawShapes implements DrawListenerInterface { 

private final Canvas canvas; 

protected int x; 
protected int y; 
protected int x2; 
protected int y2; 
protected int w; 
private boolean prev; 

protected int h; 

public DrawShapes(Canvas canvas) { 
    this.canvas = canvas; 
} 

@Override 
public void preview(Graphics2D g2) { 
    g2.setColor(Color.black); 
    if (prev) { 
     draw(g2); 
    } 
} 

@Override 
public void draw(Graphics2D g2) { 

    System.out.println("before " + x + " " + y + " " + x2 + " " + y2); 
    x = Math.min(x, x2); 
    y = Math.min(y, y2); 
    w = Math.abs(x - x2); 
    h = Math.abs(y - y2); 
    // 
    System.out.println("after " + x + " " + y + " " + x2 + " " + y2); 

} 

@Override 
public void mousePressed(MouseEvent e) { 
    prev = true; 

    this.x = e.getX(); 
    this.y = e.getY(); 
    this.x2 = e.getX(); 
    this.y2 = e.getY(); 
    System.out.println("PRESSED " + x + " " + x2 + " " + y + " " + y2); 

    canvas.repaint(); 
} 

@Override 
public void mouseReleased(MouseEvent e) { 

    // this.x2 = e.getX(); 
    // this.y2 = e.getY(); 
    final Graphics2D g2 = (Graphics2D) canvas.getImage().getGraphics(); 
    canvas.defaultSettings(g2); 
    prev = false; 
    draw(g2); 
    // canvas.repaint(); 

} 

@Override 
public void mouseDragged(MouseEvent e) { 

    this.x2 = e.getX(); 
    this.y2 = e.getY(); 
    System.out.println("dragging " + x2 + " " + y2); 
    this.canvas.repaint(); 

} 

這個類的子類DrawShapes被繪製自己的形狀的

public class SquareListener extends DrawShapes { 



@Override 
public void draw(Graphics2D g2) { 
    // TODO Auto-generated method stub 

    super.draw(g2); 
     g2.drawRect(x, y, w, h); 
// System.out.println(x + " " + y + " " + x2 + " " + y2); 
} 

回答

1

你要比較X2和Y1 X1與Y2和的情況下,當* 1> * 2 - 。換他們的drawRect()

+0

這正是我在做什麼 – Jenny 2014-12-09 13:27:00

+0

好,我還沒有讀到的一切。問題是你首先得到'x = Math.min(x,x2)',然後'w = Math.abs(x-x2)'。交換它們,即先「abs」然後「min」。現在,當x2 i486 2014-12-09 13:28:07

+0

我從來沒有在我的整個職業生涯中感到如此愚蠢((比你更棒) – Jenny 2014-12-09 13:32:53