将鼠标侦听器添加到 java swt 图像

Posted

技术标签:

【中文标题】将鼠标侦听器添加到 java swt 图像【英文标题】:Adding mouse listener to java swt image 【发布时间】:2012-07-19 18:15:04 【问题描述】:

好的,所以我创建了这样的图像:

Image deleteImage = new Image(viewer.getTable().getDisplay(),
                        Provider.PATH_TO_DELETE_ICON);

如何添加鼠标侦听器以便知道何时单击图像?

这是我的标签提供者类:

private class MyLabelProvider extends LabelProvider implements
            ITableLabelProvider 

        @Override
        public Image getColumnImage(Object element, int columnIndex) 
            if (columnIndex == 3) 
                Image deleteImage = new Image(viewer.getTable().getDisplay(),
                        Provider.PATH_TO_DELETE_ICON);
                return deleteImage;
            
            if (columnIndex == 4) 
                Image editImage = new Image(viewer.getTable().getDisplay(),
                        Provider.PATH_TO_EDIT_ICON);
                return editImage;
             else
                return null;
        

        public String getColumnText(Object element, int index) 
            Provider provider = (Provider) element;
            switch (index) 
            case 0:
                return Integer.toString(provider.getId());
            case 1:
                return provider.getName();
            case 2:
                return provider.getBulstat();
            default:
                return "";
            
        

    

【问题讨论】:

【参考方案1】:

你可以创建一个Label,通过它设置你的图片

label.setImage(deleteImage)

之后您可以执行以下操作:

label.addMouseListener(new MouseListener() 

        @Override
        public void mouseUp(MouseEvent arg0) 
            System.out.println("Click");
        

        @Override
        public void mouseDown(MouseEvent arg0) 

        

        @Override
        public void mouseDoubleClick(MouseEvent arg0) 
        
    );

【讨论】:

这将是解决方案,但它需要是图像,因为我是从查看器的 LabelProvider 获取的。如果您能告诉我 LabelProvider 的 getImage 方法如何返回 Button 而不是解决方案的图像。 创建自己的LabelProvider 并覆盖getImage() 方法?只是猜测,还没有使用LabelProvider。刚刚意识到,你不能重写一个方法,如果你改变了返回类型......那我不知道该怎么做。 LabelProvider 是用在 TableViewer 中的,对吧?你不能给那个添加一个监听器吗?您使用哪个 LabelProvider? 我可以,但是鼠标事件的来源变成了 TableViewer 的表格...我需要来源是 Image 对象。 好的,如果你在你的LabelProvider 中实现MouseListener 会怎样?那行得通吗?抱歉,我有点迷路了……

以上是关于将鼠标侦听器添加到 java swt 图像的主要内容,如果未能解决你的问题,请参考以下文章

Eclipse SWT 中用于循环组合的 Java 侦听器

具有复杂泛型的 SWT 侦听器

动画 gif 不播放 - 鼠标侦听器 - 事件鼠标输入

如何将鼠标侦听器添加到图形多边形?

在 shell 最大化按钮 swt 上添加监听器

Java SWT 创建侦听器以更改标签的文本并返回数据