2

私がやろうとしているのは、各ラベルに追加された、paintListner を介してボックス レイアウトを使用して合成された 4 つのラベルをマウスで描画することです。さらに、各ラベルには、すべてのマウス ポイントを ArrayList に追加する MouseMoveListener があります。1 つのラベル l のコードは次のとおりです。

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

    }

});

マウスでラベル上を移動すると、すべて正常に動作します (サンプル画像の上部を参照)。描画中にマウスの左ボタンを押したままにするとすぐに、ボタンを押し始めたラベルにのみ描画します (サンプル画像の下部を参照)。これは、ラベルをクリックして自動的に選択するためです。この自動選択を無効にして、マウスの左ボタンが押されているかどうかを確認することはできますか? 左マウスボタンが押されたときにのみ描画したい。

画像:

ここに画像の説明を入力

4

1 に答える 1

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();
于 2012-11-28T20:33:10.647 に答える