DragPainter.java
/**
* This example shows combinations of DockableDragPainters.
*
* @author Heidi Rakels
*/
public class DragPainter extends JPanel
{
// Static fields.
public static final int FRAME_WIDTH = 600;
public static final int FRAME_HEIGHT = 450;
// Constructor.
public DragPainter(JFrame frame)
{
super(new BorderLayout());
// Create the dock model for the docks.
FloatDockModel dockModel = new FloatDockModel();
dockModel.addOwner("frame0", frame);
// Give the dock model to the docking manager.
DockingManager.setDockModel(dockModel);
// Create the content components.
TextPanel textPanel1 = new TextPanel("I am window 1.");
TextPanel textPanel2 = new TextPanel("I am window 2.");
TextPanel textPanel3 = new TextPanel("I am window 3.");
TextPanel textPanel4 = new TextPanel("I am window 4.");
TextPanel textPanel5 = new TextPanel("I am window 5.");
// Create the dockables around the content components.
Icon icon = new ImageIcon(getClass().getResource("/com/javadocking/resources/images/text12.gif"));
Dockable dockable1 = new DefaultDockable("Window1", textPanel1, "Window 1", icon);
Dockable dockable2 = new DefaultDockable("Window2", textPanel2, "Window 2", icon);
Dockable dockable3 = new DefaultDockable("Window3", textPanel3, "Window 3", icon);
Dockable dockable4 = new DefaultDockable("Window4", textPanel4, "Window 4", icon);
Dockable dockable5 = new DefaultDockable("Window5", textPanel5, "Window 5", icon);
// Create the child tab docks.
TabDock leftTabDock = new TabDock();
TabDock rightTabDock = new TabDock();
// Add the dockables to the tab dock.
leftTabDock.addDockable(dockable1, new Position(0));
leftTabDock.addDockable(dockable2, new Position(1));
rightTabDock.addDockable(dockable3, new Position(0));
rightTabDock.addDockable(dockable4, new Position(1));
// Create the split dock.
SplitDock splitDock = new SplitDock();
// Create the single child docks for the float dock.
SingleDock singleDock = new SingleDock();
// Add the dockables to the single docks.
singleDock.addDockable(dockable5, SingleDock.SINGLE_POSITION);
// Add the child docks to the split dock at the left and right.
splitDock.addChildDock(leftTabDock, new Position(Position.LEFT));
splitDock.addChildDock(rightTabDock, new Position(Position.RIGHT));
splitDock.setDividerLocation(290);
// The position for the float child dock.
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
int x = screenSize.width / 2 - 100;
int y = screenSize.height / 2 - 100;
// Get the float dock. This is a standard dock of the floating dock model.
FloatDock floatDock = dockModel.getFloatDock(frame);
floatDock.setChildDockFactory(new SingleDockFactory());
floatDock.setDockPriority(Priority.CAN_DOCK_WITH_PRIORITY);
// Add the child docks to the float dock.
floatDock.addChildDock(singleDock, new Position(x, y, 0));
// Add the root dock to the dock model.
dockModel.addRootDock("splitDock", splitDock, frame);
// Add the split dock to the panel.
add(splitDock, BorderLayout.CENTER);
// Create the menubar.
JMenuBar menuBar = createMenu();
frame.setJMenuBar(menuBar);
}
/**
* Creates the menubar with menu: Drag Painting.
*
* @return The created menu bar.
*/
private JMenuBar createMenu()
{
// Create the menu bar.
JMenuBar menuBar = new JMenuBar();
// Build the Dragging menu.
JMenu draggingMenu = new JMenu("Drag Painting");
draggingMenu.setMnemonic(KeyEvent.VK_D);
draggingMenu.getAccessibleContext().setAccessibleDescription("The Dragging Menu");
menuBar.add(draggingMenu);
// The JMenuItems for the draggers.
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);
ButtonGroup group = new ButtonGroup();
DraggingMenuItem[] draggingMenuItems = new DraggingMenuItem[8];
draggingMenuItems[0] = new DraggingMenuItem("Rectangle", swDockableDragPainterWithoutLabel, null, false);
draggingMenuItems[1] = new DraggingMenuItem("Rectangle with image", swDockableDragPainterWithoutLabel, imageDockableDragPainter, true);
draggingMenuItems[2] = new DraggingMenuItem("Labeled rectangle", swDockableDragPainterWithLabel, null, false);
draggingMenuItems[3] = new DraggingMenuItem("Rectangle with dragged label", swDockableDragPainterWithoutLabel, labelDockableDragPainter, false);
draggingMenuItems[4] = new DraggingMenuItem("Rectangle with window", swDockableDragPainterWithoutLabelNoFloat, windowDockableDragPainterWithoutLabel, false);
draggingMenuItems[5] = new DraggingMenuItem("Labeled rectangle with labeled window", swDockableDragPainterWithLabelNoFloat, windowDockableDragPainterWithLabel, false);
draggingMenuItems[6] = new DraggingMenuItem("Rectangle with transparent window (only fast computers)", swDockableDragPainterWithoutLabelNoFloat, transparentWindowDockableDragPainterWithoutLabel, false);
draggingMenuItems[7] = new DraggingMenuItem("Labeled rectangle with labeled transparent window (only fast computers)", swDockableDragPainterWithLabelNoFloat, transparentWindowDockableDragPainterWithLabel, false);
for (int index = 0; index < draggingMenuItems.length; index++)
{
draggingMenu.add(draggingMenuItems[index]);
group.add(draggingMenuItems[index]);
}
return menuBar;
}
// Private classes.
/**
* This is the class for the content.
*/
private class TextPanel extends JPanel implements DraggableContent
{
private JLabel label;
public TextPanel(String text)
{
super(new FlowLayout());
// The panel.
setMinimumSize(new Dimension(80,80));
setPreferredSize(new Dimension(150,150));
setBackground(Color.white);
setBorder(BorderFactory.createLineBorder(Color.lightGray));
// The label.
label = new JLabel(text);
label.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
add(label);
}
// Implementations of DraggableContent.
public void addDragListener(DragListener dragListener)
{
addMouseListener(dragListener);
addMouseMotionListener(dragListener);
label.addMouseListener(dragListener);
label.addMouseMotionListener(dragListener);
}
}
/**
* A check box menu item to enable a dragger.
*/
private class DraggingMenuItem extends JRadioButtonMenuItem
{
// Constructor.
public DraggingMenuItem(String title, DockableDragPainter basicDockableDragPainter, DockableDragPainter additionalDockableDragPainter, boolean selected)
{
super(title);
// 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);
// Give this dragger factory to the docking manager.
if (selected)
{
DockingManager.setDraggerFactory(draggerFactory);
setSelected(true);
}
// Add a dragging listener as action listener.
addActionListener(new DraggingListener(draggerFactory));
}
}
/**
* A listener that installs a dragger factory.
*/
private class DraggingListener implements ActionListener
{
// Fields.
private DraggerFactory draggerFactory;
// Constructor.
public DraggingListener(DraggerFactory draggerFactory)
{
this.draggerFactory = draggerFactory;
}
// Implementations of ItemListener.
public void actionPerformed(ActionEvent actionEvent)
{
DockingManager.setDraggerFactory(draggerFactory);
}
}
// Main method.
public static void main(String[] args)
{
// Create the frame.
JFrame frame = new JFrame("Split dock");
// Create the panel and add it to the frame.
DragPainter panel = new DragPainter(frame);
frame.getContentPane().add(panel);
// Set the frame properties and show it.
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
frame.setLocation((screenSize.width - FRAME_WIDTH) / 2, (screenSize.height - FRAME_HEIGHT) / 2);
frame.setSize(FRAME_WIDTH, FRAME_HEIGHT);
frame.setVisible(true);
}
public static void createAndShowGUI()
{
Runnable doCreateAndShowGUI = new Runnable()
{
public void run()
{
createAndShowGUI();
}
};
SwingUtilities.invokeLater(doCreateAndShowGUI);
}
}