画布上的可单击对象SWT中的图像

时间:2011-03-30 14:49:31

标签: java canvas swt

我使用图像上的过滤器创建图像

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 个答案:

答案 0 :(得分:2)

所以最好的方法是在画布上添加一个鼠标控件监听器吗?

// 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 :(得分:1)

如果要将对象直接绘制到画布上,即不将它们作为组件/小部件添加到画布,则需要确定自己单击的对象。这是因为画布对你画的内容一无所知。您可以将鼠标侦听器添加到接收单击事件的画布,然后确定是否有任何这些单击位于您绘制的对象的边界内。

您也可以使用可点击的对象类继承Control。然后,将mouseListener添加到自定义Control并将其添加到画布。