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);
}
這正是我在做什麼 – Jenny 2014-12-09 13:27:00
好,我還沒有讀到的一切。問題是你首先得到'x = Math.min(x,x2)',然後'w = Math.abs(x-x2)'。交換它們,即先「abs」然後「min」。現在,當x2
i486
2014-12-09 13:28:07
我從來沒有在我的整個職業生涯中感到如此愚蠢((比你更棒) – Jenny 2014-12-09 13:32:53