gpt4 book ai didi

java - 我可以监听 java 中的所有拖放事件吗?

转载 作者:搜寻专家 更新时间:2023-10-31 20:28:33 26 4
gpt4 key购买 nike

我想监听 Swing 上的所有拖放事件。

我设法监听拖动事件的一种方法是添加:

final long mask = AWTEvent.MOUSE_EVENT_MASK + AWTEvent.MOUSE_MOTION_EVENT_MASK;

AWTEventListener eventListener = new AWTEventListener() {
public void eventDispatched(final AWTEvent event) {}
};
Toolkit.getDefaultToolkit().addAWTEventListener(eventListener, mask);

但这并没有得到拖放事件,甚至在拖放时也没有从鼠标释放事件。有没有办法拦截应用程序中的所有拖放事件,而不是分别在每个组件上?

最佳答案

这不是满足您要求的完整(甚至可能不是可行的 ;-) 解决方案,但可能会让您入门。

如前所述,所有低级输入事件(如 mouseEvents,取决于底层操作系统,可能还有其他事件)在拖动期间被 dnd 子系统吞没。在内部,它们被转换为 DragXXEvents,后者又由 DragSource 触发。 dragSource 是一个在所有 dnd 操作中重复使用的单例。所以一个方法可能是:

  • 获取全局 DragSource
  • 注册一个 DragSource/Motion/Listener
  • 根据需要监控来自 DragSourceEvent 的信息

一些片段:

DragSource source = DragSource.getDefaultDragSource();
DragSourceMotionListener dsml = new DragSourceMotionListener() {

@Override
public void dragMouseMoved(DragSourceDragEvent dsde) {
debug(dsde);
}
};
source.addDragSourceMotionListener(dsml);

// just some logging
protected void debug(DragSourceEvent dsde) {
DragSourceContext context = dsde.getDragSourceContext();
Component source = context.getComponent();
String text = source != null ? source.getName() : "none";
LOG.info(text + " x/y " + dsde.getX() + "/" + dsde.getY());
}

还有很多工作要做......

关于java - 我可以监听 java 中的所有拖放事件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21824684/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com