Vla*_*ala 5 java swing drag-and-drop awt
我想听听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);
Run Code Online (Sandbox Code Playgroud)
但这并没有得到丢弃事件,甚至在放弃时也不会从鼠标中释放事件.有没有办法拦截应用程序中的所有拖放事件,而不是分别在每个组件上?
这不是满足您的要求的完整(甚至可能不是可行的;-)解决方案,但可能会帮助您入门。
如前所述,所有低级输入事件(如 mouseEvents,根据底层操作系统可能还有其他事件)在拖动过程中都会被 dnd 子系统吞没。在内部,它们被转换为 DragXXEvents,而 DragXXEvents 又由 DragSource 触发。DragSource 是一个在所有 dnd 操作中重复使用的单例。所以一种方法可能是:
一些片段:
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());
}
Run Code Online (Sandbox Code Playgroud)
前面还有很多工作要做...
| 归档时间: |
|
| 查看次数: |
1167 次 |
| 最近记录: |