-1

こんにちは、キャンバス内に線、円、正方形、三角形を作成できる小さなプログラムを作成しています。これはすべて、GC イベントと 2 つのポイント (Sx,Sy) と (Ex,Ey) で行われます。キャンバス内をクリックして線をドラッグすると、イベントがトリガーされます。そして、始点と終点の間で幾何学図形を選択します。ボタンをクリックして10ピクセルを右または左に更新して移動しようとすると、nullではないイベントを送信するか、キャンバスに描画するイベントが必要です。ここにコードの一部があります。私はすべての 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 に答える