Java 制作一个事件变量在画布上画一条线
嗨,我正在制作一个小程序,可以在画布上画线、圆、正方形和三角形。所有这些都包含一个GC事件和两个点(Sx,Sy)和(Ex,Ey)。当我在画布内单击并拖动一条线穿过画布时,事件会被触发。它使几何图形在起点和终点之间进行选择。当我尝试更新并向左或向右移动10个像素时,通过单击按钮,我需要发送一个非空的事件,或者在画布上绘制事件。下面是一些代码。我把所有的SX-SY-EX和EY作为全局变量Java 制作一个事件变量在画布上画一条线,java,events,canvas,swt,Java,Events,Canvas,Swt,嗨,我正在制作一个小程序,可以在画布上画线、圆、正方形和三角形。所有这些都包含一个GC事件和两个点(Sx,Sy)和(Ex,Ey)。当我在画布内单击并拖动一条线穿过画布时,事件会被触发。它使几何图形在起点和终点之间进行选择。当我尝试更新并向左或向右移动10个像素时,通过单击按钮,我需要发送一个非空的事件,或者在画布上绘制事件。下面是一些代码。我把所有的SX-SY-EX和EY作为全局变量 canvas.addListener(SWT.MouseDown, new Listener() {
canvas.addListener(SWT.MouseDown, new Listener() {
@Override
public void handleEvent(Event event) {
SX = event.x;
SY = event.y;
textSX.setText(Integer.toString(SX));
textSY.setText(Integer.toString(SY));
drag = true;
}
});
canvas.addListener(SWT.MouseUp, new Listener() {
@Override
public void handleEvent(Event event) {
EX = event.x;
EY = event.y;
drag = false;
}
});
canvas.addListener(SWT.MouseMove, new Listener() {
@Override
public void handleEvent(Event event) {
if(drag)
{
EX = event.x;
EY = event.y;
textEX.setText(Integer.toString(EX));
textEY.setText(Integer.toString(EY));
canvas.redraw();
}
}
});
canvas.addListener(SWT.Paint, new Listener() {
@Override
public void handleEvent(Event event) {
if(drag)
{
if(btnLinea.getSelection()){
gc = event.gc;
crearLinea(SX,SY,EX,EY,gc);
}
if(btnCirculo.getSelection()){
gc = event.gc;
crearCirculo(SX,SY,EX,EY,gc);
}
if(btnCuadrado.getSelection()){
gc = event.gc;
crearCuadro(SX,SY,EX,EY,gc);
}
if(btnTriangulo.getSelection()){
gc = event.gc;
crearTriangulo(SX,SY,EX,EY,gc);
}
}
}
});
MasX.addListener(SWT.Selection, new Listener(){
public void handleEvent(Event event) {
SX += 10;
EX += 10;
System.out.println(SX+" "+SY+" "+EX+" "+EY);
//canvas.redraw();
System.out.println("Aqui 2");
//gc.drawLine(SX, SY, EX, EY);
crearLinea(SX,SY,EX,EY,gc);
}
});
如果有什么不清楚的地方,请询问:D提前感谢您的帮助。好的,我找到了如何进行移动的方法。我调用了canvas.redraw()方法并生成了canvas.addPaintListener();这是由重画调用的,这个方法给了我一个事件,我正在寻找它来更新行使用的位置。这是密码
canvas.addPaintListener(new PaintListener() {
@Override
public void paintControl(PaintEvent event) {
if(btnLinea.getSelection()){
gc = event.gc;
crearLinea(SX,SY,EX,EY,gc);
}
if(btnCirculo.getSelection()){
gc = event.gc;
crearCirculo(SX,SY,EX,EY,gc);
}
if(btnCuadrado.getSelection()){
gc = event.gc;
crearCuadro(SX,SY,EX,EY,gc);
}
if(btnTriangulo.getSelection()){
gc = event.gc;
crearTriangulo(SX,SY,EX,EY,gc);
}
}
});
这就是方法。调用此方法的按钮是:
MasX.addListener(SWT.Selection, new Listener(){
public void handleEvent(Event event) {
SX += 10;
EX += 10;
System.out.println(SX+" "+SY+" "+EX+" "+EY);
canvas.redraw();
System.out.println("Aqui 2");
//gc.drawLine(SX, SY, EX, EY);
//crearLinea(SX,SY,EX,EY,gc);
}
});
希望这能帮助下一个有这个问题的人