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

查看:102
本文介绍了用于拖放的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);
            });

*缩略图是JLabel的数组

*Thumbnails is array of JLabel

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

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天全站免登陆