Я создаю изображение, используя фильтр на изображении

private void createContents(final Shell shell) { 
shell.setLayout(new FillLayout());
// Create the canvas for drawing
canvas = new Canvas(shell,SWT.NO_BACKGROUND);


canvas.addPaintListener(new PaintListener() {
  public void paintControl(PaintEvent event) {
  Image image = new Image(shell.getDisplay(), canvas.getBounds());
  Image image2 = new Image(shell.getDisplay(), canvas.getBounds());
  //... I add some figure to the images

  ImageData data = image.getImageData();
  ImageData data2 = image2.getImageData();

  for(int j=0;j<rect.width;j++){
   for(int i=0;i<rect.height;i++){
     if(data.getPixel(j, i)<1){
       data.setPixel(j, i , data2.getPixel(j, i));
      }                 
    }
   }

Как я могу добавить на фигуру несколько интерактивных объектов?

1
nevios 30 Мар 2011 в 18:49

2 ответа

Лучший ответ

Если вы рисуете объекты прямо на холсте, то есть не добавляете их в качестве компонентов / виджетов на холст, вам нужно будет самостоятельно определить, какие объекты были нажаты. Это так, потому что холст ничего не знает о том, что вы на нем рисуете. Вы можете добавить на холст слушателя мыши, который получает события щелчка, а затем определять, находятся ли какие-либо из этих щелчков внутри границ нарисованных вами объектов.

В качестве альтернативы вы можете создать подкласс Control с помощью класса интерактивных объектов. Затем добавьте mouseListener в свой настраиваемый элемент управления и добавьте его на холст.

1
Matt Wonlaw 30 Мар 2011 в 19:02

Итак, лучший способ - добавить на холст слушателя управления мышью?

// Create the canvas for drawing
 canvas = new Canvas(shell,SWT.NO_BACKGROUND);
 canvas.addMouseListener(new MouseListener(){
    @Override
    public void mouseDoubleClick(MouseEvent e) {
       // TODO Auto-generated method stub   
    }
    @Override
    public void mouseDown(MouseEvent e) {
       // TODO Auto-generated method stub
       System.out.println("Click"); 
    }
    @Override
    public void mouseUp(MouseEvent e) {
       // TODO Auto-generated method stub   
    }       
});

И затем контролируйте, где находится щелчок, возможно, используя Rectangle.containt (int x, int y);

2
nevios 31 Мар 2011 в 17:57