2013-10-17 79 views
-1

嗨即時製作一個小程序,可以在畫布內製作線條,圓形,正方形和三角形。所有這些都帶有一個GC事件和兩個點(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感謝您的幫助。

回答

0

好吧,我發現如何使運動發生。我調用了canvas.redraw()方法並創建了一個canvas.addPaintListener();這是由重繪調用,這個方法給我我正在尋找更新te的地方是該行的用途。以下是密碼

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); 

     } 

    }); 

希望這有助於誰擁有這個問題的下一個人。