用于拖放的 JLabel 鼠标事件 [英] JLabel mouse events for Drag and Drop
问题描述
我想通过覆盖鼠标事件来启用 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屋!