2012-11-28 70 views
2

我想要做的是用四個標籤繪製我的鼠標,這些標籤通過一個paintListner與盒子佈局合成,並添加到每個標籤中。此外,每個標籤都有一個MouseMoveListener,它將每個鼠標點添加到一個ArrayList。這裏是一個標籤l的代碼:在SWT中禁用組件選擇

l.addMouseMoveListener(new MouseMoveListener() { 
    public void mouseMove(MouseEvent e) { 
     compLocation.setLocation(l.getLocation().x, l.getLocation().y); 
     pointsToDraw1.get(n).add(new Point(e.x, e.y)); 
     l.redraw(); 
    } 

}); 


l.addPaintListener(new PaintListener(){ 
    @Override 
    public void paintControl(PaintEvent e) { 
    Device device = Display.getCurrent(); 
    Color red = new Color (device, 255, 0, 0); 
    e.gc.setBackground(red); 
    for(Point p : pointsToDraw1.get(n)){ 
     e.gc.fillRectangle(p.x, p.y, 4, 4); 
    } 

    } 

}); 

當我用鼠標移動標籤時,一切正常(請參閱示例圖像的頂部)。只要我按下鼠標左鍵並在繪圖時保持按下狀態,我只需在標籤上畫一個按鈕即可(請參閱示例圖像的底部)。這是因爲我通過點擊它來自動選擇標籤。是否有可能以某種方式禁用此自動選擇,並檢查是否按下鼠標左鍵?我只想在鼠標左鍵被按下時繪製。

圖片:

enter image description here

+0

您是否嘗試過向每個標籤添加一個Listener到'SWT.MouseDown'並設置'event.doit = false;'?這可以阻止選擇。 – Baz

+0

這確實沒有用。仍然是同樣的問題。我添加了以下內容: 監聽器監聽器=新監聽器(){ \t public void handleEvent(Event e){ \t e.doit = false; \t} }; l.addListener(SWT.MouseDown,listener); – Averius

+0

你是什麼意思?「我通過點擊它自動選擇標籤」。當你說標籤獲得_selected_時,你是什麼意思? –

回答

0

這裏工作樣品。它應該做你正在尋找的東西

final Display display = new Display(); 
    final Shell shell = new Shell(display); 
    shell.setSize(400, 400); 
    final Point p = new Point(0, 0); 
    shell.addMouseMoveListener(new MouseMoveListener() { 

     @Override 
     public void mouseMove(MouseEvent e) { 

     p.x = e.x; 
     p.y = e.y; 

     shell.redraw(p.x,p.y,2,2,true); 

     for(Control c: shell.getChildren()) 
     { 
      if(c.getBounds().contains(p)) 
      { 
      Point t = e.display.map(shell, c, p); 
      p.x = t.x; 
      p.y = t.y; 
      c.redraw(p.x,p.y,2,2,true); 
      } 
     } 

     } 
    }); 
    PaintListener painter = new PaintListener() { 

     @Override 
     public void paintControl(PaintEvent e) { 

     e.gc.setBackground(e.display.getSystemColor(SWT.COLOR_BLUE)); 
     e.gc.fillRectangle(p.x, p.y, 2, 2); 

     } 
    }; 
    shell.addPaintListener(painter); 
    final Label l = new Label(shell, SWT.NONE); 
    l.setBounds(10, 10, 60, 40); 
    l.setBackground(display.getSystemColor(SWT.COLOR_CYAN)); 
    l.setText("Label1"); 
    l.addPaintListener(painter); 
    l.addMouseMoveListener(new MouseMoveListener() { 

     @Override 
     public void mouseMove(MouseEvent e) { 


     p.x = e.x; 
     p.y = e.y; 

     Point t = e.display.map(l, shell, p); 

     Rectangle bounds = l.getBounds(); 
     if(bounds.contains(t)) 
     { 
      l.redraw(p.x,p.y,2,2,true); 
     } 
     else 
     { 
      p.x = t.x; 
      p.y = t.y; 
      shell.redraw(p.x,p.y,2,2,true); 
     } 
     } 
    }); 

    shell.open(); 
    while (!shell.isDisposed()) { 
     if (!display.readAndDispatch()) { 
      display.sleep(); 
     } 
    } 
    display.dispose(); 
+0

工作。謝謝。 – Averius