用于拖放的 JLabel 鼠标事件 [英] JLabel mouse events for Drag and Drop

查看:40
本文介绍了用于拖放的 JLabel 鼠标事件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想通过覆盖鼠标事件来启用 JLabel 上的拖放功能,但是当我在 mousePressed 事件中定义拖放时,mouseReleased 不会对该 JLabel 生效.我做错了什么吗?

I want to enable the drag and drop feature over a JLabel by overriding mouse events over it , but when I define the drag and drop in mousePressed event ,the mouseReleased does not take effect on that JLabel. Am I doing something wrong ?

            Thumbnails[I_Loop].setText("1");
            Thumbnails[I_Loop].setTransferHandler(new TransferHandler("text"));
            Thumbnails[I_Loop].addMouseListener( new MouseAdapter() {
                public void  mouseReleased(MouseEvent me) {
                       System.out.println("here mouse released");
                  }
                public void mousePressed(MouseEvent me) {
                    System.out.println("here mouse pressed");
                    JComponent comp = (JComponent) me.getSource();
                    TransferHandler handler = comp.getTransferHandler();
                    handler.exportAsDrag(comp, me, TransferHandler.COPY);
            });

*Thumbnails 是 JLabel 的数组

*Thumbnails is array of JLabel

运行程序时,拖放工作正常,但不会打印此处鼠标释放"语句.但是,当我从 mousePressed() 方法中删除负责免打扰的代码时,会打印此处鼠标已释放".

When running the program , the drag and drop works but the statement "here mouse released" does not get printed. However, When I remove the code responsible for DND from the mousePressed() method, "here mouse released" is printed.

这段代码有什么问题?

推荐答案

好吧,如果我没记错的话,拖放机制会捕获所有鼠标事件并自行处理它们.因此,不再抛出正常的 MouseEvents.您需要在 JLabel 的 DropTarget 上注册一个 DropTargetListener.

Well, if I remember correctly, the drag and drop machinery catches all mouse events and processes them itself. Thus, the normal MouseEvents are not thrown anymore. You'd need to register a DropTargetListener on the JLabel's DropTarget.

这篇关于用于拖放的 JLabel 鼠标事件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆