/** * 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); } }