我在需要的时候再次来找你。 hehehe我已经做了一个小小的SWT,可以画出线条,圆形,正方形和三角形。我通过将起点和终点画出所有这些数字来做到这一点。一旦画出,我想在x和y轴上移动它。我把这里放在我有麻烦的地方。通过在画布中放置一个鼠标监听器来处理线条,以及听到我点击并放开鼠标点击时的声音。 //这是听者使用SWT和画布,用按钮绘制的移动线
MasX.addListener(SWT.Selection,新监听器(){
public void handleEvent(Event event) {
SX += 1;
EX += 1;
canvas.redraw();
//gc.drawLine(SX, SY, EX, EY);
//crearLinea(SX,SY,EX,EY,gc);
}
});
//这是线描方法
public void crearLinea(int SX, int SY, int EX, int EY, GC gc){
int x1 = SX;
int x2 = EX;
int y1 = SY;
int y2 = EY;
System.out.println(SX+" "+SY+" "+EX+" "+EY);
int cont = 0;
float dx, dy, m, y, x;
if (x1>x2){
int ax = x2;
int ay = y2;
x2 = x1;
x1 = ax;
y2 = y1;
y1 = ay;
}
dx = x2 - x1;
dy = y2 - y1;
m = dy/dx;
if (m>=-1&&m<=1){
y = y1;
//System.out.println(m+" "+x1+" "+y1+"....."+x2+" "+y2);
for (x = x1 ; x <= x2;x=x+5){
//if (x>=dot&&x<=dot+10||x>=dot*2&&x<=dot*2+10||x>=dot*3&&x<=dot*3+10){
gc.drawLine((int)x, (int)Math.round(y), (int)x, (int)Math.round(y));
y+=m*5;
//}
}
}
if(m>1){
x = x1;
//System.out.println(m+" "+x1+" "+y1+"....."+x2+" "+y2);
for (y = y1 ; y <= y2;y=y+3){
if (cont<=5){
//System.out.println(cont);
gc.drawLine((int)Math.round(x), (int)y, (int)Math.round(x), (int)y);
cont++;
}
if(cont>=10){
//System.out.println(cont);
cont=0;
}
if(cont>5){
//System.out.println(cont);
cont++;
}
x+=(1/m)*3;
}
}
if(m<-1){
x = x1;
//System.out.println(m+" "+x1+" "+y1+"....."+x2+" "+y2);
for (y = y1 ; y >= y2;y--){
if(y%10==0||y%8==0||y%12==0){
gc.drawLine((int)Math.round(x), (int)y, (int)Math.round(x), (int)y);
}
x-=(1/m);
}
}
}
它给误差我是空指针异常并指向gc.drawline()
希望有人能帮助我:D
我这样做,但它所做的只是将画布放在白色。真的很好的回答思想。我仍然不知道如何使用重绘方法。 –
非常感谢您的帮助。这篇文章帮助我找到了我正在寻找的答案。我在下一篇文章中发布答案。 –