用于拖放的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);
});
*缩略图是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屋!