Кликабельный объект на холсте Изображение в SWT - PullRequest
1 голос
/ 30 марта 2011

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

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

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

Ответы [ 2 ]

2 голосов
/ 31 марта 2011

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

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

1 голос
/ 30 марта 2011

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

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

...