Java 在SWT中复制ImageIcon功能

Java 在SWT中复制ImageIcon功能,java,swt,Java,Swt,在我的SWT应用程序中,我有一个画布,其中显示了当前我直接绘制到画布上的一些数据表示的地图。我想实现像Swing这样的功能,在Swing中,我可以有一个ImageIcon,它可以管理单击时的侦听并在画布上添加这些内容,如何实现这一点,如何在画布上透明地添加一些内容,以便我仍然可以单击画布,以及哪些类与ImageIcon类似?目前,我必须迭代检查单击是否与我绘制点的位置匹配。这是不需要的。您可以向画布添加另一个透明画布,并在其上侦听鼠标事件 org.eclipse.swt.graphics.Ima

在我的SWT应用程序中,我有一个画布,其中显示了当前我直接绘制到画布上的一些数据表示的地图。我想实现像Swing这样的功能,在Swing中,我可以有一个ImageIcon,它可以管理单击时的侦听并在画布上添加这些内容,如何实现这一点,如何在画布上透明地添加一些内容,以便我仍然可以单击画布,以及哪些类与ImageIcon类似?目前,我必须迭代检查单击是否与我绘制点的位置匹配。这是不需要的。

您可以向画布添加另一个透明画布,并在其上侦听鼠标事件

org.eclipse.swt.graphics.Image dataImage = ...;

Canvas dataCanvas = new Canvas(mapCanvas, SWT.TRANSPARENT);
dataCanvas.addPaintListener(new PaintListener(){
    @Override
    public void paintControl(PaintEvent e) {
        e.gc.drawImage(dataImage, 0, 0);
    }
});
dataCanvas.setBounds(locationX, loctionY,
    dataImage.getBounds().width, dataImage.getBounds().height);

dataCanvas.addMouseListener(...);

这是我效率低下的解决方案,只是转移到了另一个画布上。我自己已经解决了这个问题,稍后将发布。@denis Well,你的问题肯定描述了其他一些东西。目前,我直接在画布上绘制了一些数据表示,所以你只是将其移动到另一个画布上并覆盖了它。由于图像不可单击,我仍然会有我原来的问题,即循环检查目标区域上的单击。@denis否,添加另一个画布来绘制图像的关键在于,画布是可单击的,您将使额外的画布与它显示的图像大小相同。我理解它是如何工作的,但它完全没有实现任何功能,而不是在我最初非常糟糕的解决方案中。我知道你在衡量我的要求时遇到了困难,我可以接受我的观点,但我承认这不是一个好的解决方案,这是我在另一张画布上已经有的。画布是可点击的,图像并不像前面说过的那样两次,所以您只需要使用我的原始循环解决方案来检查我是否真的点击了感兴趣的区域。我自己用标签解决了这个问题。