You can find the code of this example in FirstExample.java.
public class FirstExample extends JPanel { // Constructor. public FirstExample(JFrame frame) { super(new BorderLayout()); // Create the split panes. JSplitPane leftSplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT); leftSplitPane.setDividerLocation(250); JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT); splitPane.setDividerLocation(400); splitPane.setLeftComponent(leftSplitPane); // Add the split pane to the panel. add(splitPane, BorderLayout.CENTER); } }
public static final int FRAME_WIDTH = 600; public static final int FRAME_HEIGHT = 450; public static void createAndShowGUI() { // Create the frame. JFrame frame = new JFrame("First Example"); // Create the panel and add it to the frame. FirstExample panel = new FirstExample(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); }
private class TextPanel extends JPanel { 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); } }
// 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. Dockable dockable1 = new DefaultDockable("Window1", textPanel1, "Window 1", null, DockingMode.ALL); Dockable dockable2 = new DefaultDockable("Window2", textPanel2, "Window 2", null, DockingMode.ALL); Dockable dockable3 = new DefaultDockable("Window3", textPanel3, "Window 3", null, DockingMode.ALL); Dockable dockable4 = new DefaultDockable("Window4", textPanel4, "Window 4", null, DockingMode.ALL); Dockable dockable5 = new DefaultDockable("Window5", textPanel5, "Window 5", null, DockingMode.ALL);
// Create the tab docks. TabDock topTabDock = new TabDock(); TabDock bottomTabDock = new TabDock(); TabDock rightTabDock = new TabDock(); // Add the dockables to these tab docks. topTabDock.addDockable(dockable1, new Position(0)); topTabDock.addDockable(dockable2, new Position(1)); bottomTabDock.addDockable(dockable3, new Position(0)); rightTabDock.addDockable(dockable4, new Position(0));
// The windows of the tab docks should be able to split. // Put the tab docks in split docks. SplitDock topSplitDock = new SplitDock(); topSplitDock.addChildDock(topTabDock, new Position(Position.CENTER)); SplitDock bottomSplitDock = new SplitDock(); bottomSplitDock.addChildDock(bottomTabDock, new Position(Position.CENTER)); SplitDock rightSplitDock = new SplitDock(); rightSplitDock.addChildDock(rightTabDock, new Position(Position.CENTER));
// Create the dock model for the docks. FloatDockModel dockModel = new FloatDockModel(); dockModel.addOwner("frame0", frame); DockingManager.setDockModel(dockModel);
// Add the 3 root docks to the dock model. dockModel.addRootDock("topdock", topSplitDock, frame); dockModel.addRootDock("bottomdock", bottomSplitDock, frame); dockModel.addRootDock("rightdock", rightSplitDock, frame);
// Add the root docks to the split panes. leftSplitPane.setLeftComponent(topSplitDock); leftSplitPane.setRightComponent(bottomSplitDock); splitPane.setLeftComponent(leftSplitPane); splitPane.setRightComponent(rightSplitDock);
// Dockable 5 should float. Add dockable 5 to the float dock of the dock model ( // The float dock is a default root dock of the FloatDockModel. FloatDock floatDock = dockModel.getFloatDock(frame); Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); floatDock.addDockable(dockable5, new Point(screenSize.width / 2, screenSize.height / 2), new Point());
public void addDragListener(DragListener dragListener) { addMouseListener(dragListener); addMouseMotionListener(dragListener); label.addMouseListener(dragListener); label.addMouseMotionListener(dragListener); }