-1

嗨,我正在制作一个小程序,可以在画布内制作线条、圆形、正方形和三角形。所有这一切都有一个 GC 事件和两个点 (Sx,Sy) 和 (Ex,Ey)。当我在画布内单击并拖动一条线穿过它时,该事件被触发。它使几何图形在起点和终点之间进行选择。当我尝试更新并向右或向左移动 10 个像素时,所有人都认为,通过单击一个按钮,我需要发送一个不为空的事件或让该事件在画布上绘制。这是一些代码。我将所有 SX SY EX 和 EY 作为全局变量。

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 提前感谢您的帮助。

4

1 回答 1

0

好的,我找到了如何使运动发生。我调用了 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);

        }

    });

希望这可以帮助下一个遇到此问题的人。

于 2013-10-18T01:52:48.363 回答