+ public void initDragGestureListener(Component rootPane, UnaryOperator<Point2D> controlToCanvas) {
+ final DragSource ds = new DragSource();
+ DragGestureListener dgl = new DragGestureListener() {
+ @Override
+ public void dragGestureRecognized(DragGestureEvent dge) {
+ InputEvent ie = dge.getTriggerEvent();
+ if (ie instanceof java.awt.event.MouseEvent) {
+ java.awt.event.MouseEvent e = (java.awt.event.MouseEvent) ie;
+ Point2D controlPos = getControlPosition(e);
+ Point2D canvasPos = controlToCanvas.apply(controlPos);
+
+ MouseDragBegin event = new MouseDragBegin(this,
+ e.getWhen(), 0,
+ getButtonStatus(e),
+ getStateMask(e),
+ getMouseButton(e),
+ canvasPos,
+ controlPos,
+ controlPos,
+ getScreenPosition(e));
+
+ handleEvent(event);
+
+ if (event.transferable != null) {
+ ds.startDrag(dge, null, event.transferable, null);
+ }
+ }
+ }
+ };
+ ds.createDefaultDragGestureRecognizer(
+ rootPane,
+ DnDConstants.ACTION_COPY_OR_MOVE | DnDConstants.ACTION_LINK,
+ dgl);
+ }