A DraggerFactory creates the draggers for dragging the dockables of your application. You have to give your dragger factory to the DockingManager.
By default the StaticDraggerFactory is used. You can use a DynamicDraggerFactory like this:
DockingManager.setDraggerFactory(new DynamicDraggerFactory());
By default this way of dragging is used. When a Dockable is dragged, a representation of the dockable, is painted. This is done by a DockableDragPainter.
Usually this representation is a rectangle. It shows where the dockable will be docked in a Dock, if the mouse would be released at the current mouse position. This rectangle can be painted:
DockableDragPainter swDockableDragPainterWithoutLabel = new SwDockableDragPainter(new DefaultRectanglePainter(), false); DockableDragPainter swDockableDragPainterWithLabel = new SwDockableDragPainter(new RectangleDragComponentFactory(new DefaultRectanglePainter(), true), false); DockableDragPainter swDockableDragPainterWithoutLabelNoFloat = new SwDockableDragPainter(new DefaultRectanglePainter()); DockableDragPainter swDockableDragPainterWithLabelNoFloat = new SwDockableDragPainter(new RectangleDragComponentFactory(new DefaultRectanglePainter(), true)); DockableDragPainter labelDockableDragPainter = new LabelDockableDragPainter(); DockableDragPainter imageDockableDragPainter = new ImageDockableDragPainter(); DockableDragPainter windowDockableDragPainterWithoutLabel = new WindowDockableDragPainter(new DefaultRectanglePainter()); DockableDragPainter windowDockableDragPainterWithLabel = new WindowDockableDragPainter(new DefaultRectanglePainter(), true); DockableDragPainter transparentWindowDockableDragPainterWithoutLabel = new TransparentWindowDockableDragPainter(new DefaultRectanglePainter()); DockableDragPainter transparentWindowDockableDragPainterWithLabel = new TransparentWindowDockableDragPainter(new DefaultRectanglePainter(), true);
Different drag painters can be combined with the CompositeDockableDragPainter:
// Create the dockable drag painter and dragger factory. CompositeDockableDragPainter compositeDockableDragPainter = new CompositeDockableDragPainter(); compositeDockableDragPainter.addPainter(basicDockableDragPainter); if (additionalDockableDragPainter != null) { compositeDockableDragPainter.addPainter(additionalDockableDragPainter); } DraggerFactory draggerFactory = new StaticDraggerFactory(compositeDockableDragPainter);
A rectangle to represent the dockable is painted with a RectanglePainter. By default a DefaultRectanglePainter is used. You can change the layout of this drag rectangle by changing the properties of this painter:
// The drag rectangles have to be rubberbands. float[] pattern = {1.0f, 1.0f}; Stroke stroke = new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 1.0f, pattern, 0.0f); DefaultRectanglePainter borderPainter = new DefaultRectanglePainter(); borderPainter.setStroke(stroke); borderPainter.setBorderColor(Color.black); borderPainter.setBorderCount(4); borderPainter.setBorderShift(1); borderPainter.setFillColor(null); borderPainter.setArcHeight(0); borderPainter.setArcWidth(0); SwDockableDragPainter dockableDragPainter = new SwDockableDragPainter(borderPainter); StaticDraggerFactory draggerFactory = new StaticDraggerFactory(dockableDragPainter); DockingManager.setDraggerFactory(draggerFactory);
When a dockable is dragged, and the mouse is above a dock where the dockable can be docked, then the dockable is immediately docked in that dock, but the dragging can still be continued.
You can use dynamic dragging like this:
IMPORTANT: Sometimes dynamic dragging can be confusing for the users of your application, especially when a dockable has a lot of possibilities to dock itself.DockingManager.setDraggerFactory(new DynamicDraggerFactory());
By default the docking library uses the folowing cursors:
DockingManager.setCanDockCursor(myDockCursor); DockingManager.setCanNotDockCursor(myCanNotDockCursor);
DynamicDragging | Shows dynamic dragging of dockables. |
DragRectangle | Shows other drag rectangles. |
DragPainter | Shows combinations of dockable drag painters. |