/** * This example shows 2 floating dockables in decorated dialogs. */ public class DecoratedDialogs extends JPanel { // Static fields. public static final int FRAME_WIDTH = 600; public static final int FRAME_HEIGHT = 450; // Constructor. public DecoratedDialogs(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); // Give our component factory to the docking manager. DockingManager.setComponentFactory(new MyComponentFactory()); // 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."); // 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); // Create the single child docks for the float dock. SingleDock singleDock1 = new SingleDock(); SingleDock singleDock2 = new SingleDock(); // Add the dockables to the single docks. singleDock1.addDockable(dockable1, SingleDock.SINGLE_POSITION); singleDock2.addDockable(dockable2, SingleDock.SINGLE_POSITION); // Create the tab dock. TabDock tabDock = new TabDock(); // Add the dockable to the tab dock. tabDock.addDockable(dockable3, new Position(0)); // The position for the float child docks. 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(singleDock1, new Position(x, y, 0)); floatDock.addChildDock(singleDock2, new Position(x + 50, y + 50, 1)); // Add the 1 root dock to the dock model. dockModel.addRootDock("tabDock", tabDock, frame); // Add the split pane to the panel. add(tabDock, BorderLayout.CENTER); } /** * This component factory creates decorated dialogs for the floating windows. * * @author Heidi Rakels. */ private class MyComponentFactory extends DefaultSwComponentFactory { public JDialog createJDialog(Window owner) { // Create the dialog. JDialog dialog = null; if (owner instanceof JDialog) { dialog = new JDialog((JDialog)owner, ((JDialog)owner).getTitle()); } else if (owner instanceof JFrame) { dialog = new JDialog((JFrame)owner, ((JFrame)owner).getTitle()); } else { dialog = new JDialog((JFrame)null, ""); } return dialog; } } /** * 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); } } // Main method. public static void createAndShowGUI() { // Create the frame. JFrame frame = new JFrame("Float dock"); // Create the panel and add it to the frame. DecoratedDialogs panel = new DecoratedDialogs(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 main(String args[]) { Runnable doCreateAndShowGUI = new Runnable() { public void run() { createAndShowGUI(); } }; SwingUtilities.invokeLater(doCreateAndShowGUI); } }