boolean (DropTargetDragEvent event) { JComponent component = getComponent(event); if (component == null) { return false; } Point location = new Point(this.screen); SwingUtilities.convertPointFromScreen(location, component); Rectangle bounds = component.getVisibleRect(); // mouse out of a component if (!bounds.contains(location.x, location.y)) { return false; } int margin = (int)(5 * sysScale(component)); int deltaX = getDelta(3, margin, location.x, bounds.x, bounds.x + bounds.width); int deltaY = getDelta(5, margin, location.y, bounds.y, bounds.y + bounds.height); if (deltaX != 0 || deltaY != 0) { LOG.debug("SmoothAutoScroller delta X:", deltaX, " Y:", deltaY); bounds.x += deltaX; bounds.y += deltaY; SwingUtilities.convertPointToScreen(location, component); component.scrollRectToVisible(bounds); SwingUtilities.convertPointFromScreen(location, component); } DropTarget target = component.getDropTarget(); if (target != null && !location.equals(event.getLocation())) { LOG.debug("SmoothAutoScroller simulates dragOver"); target.dragOver( new DropTargetDragEvent( event.getDropTargetContext(), location, event.getDropAction(), event.getSourceActions()) ); } return true; }