Mega Code Archive

 
Categories / Java / Swing Components
 

SplitPane and dockable component

package net.eleritec.docking.demos; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.Insets; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSplitPane; import javax.swing.border.LineBorder; import javax.swing.plaf.basic.BasicSplitPaneDivider; import javax.swing.plaf.basic.BasicSplitPaneUI; import net.eleritec.docking.Dockable; import net.eleritec.docking.DockableAdapter; import net.eleritec.docking.DockingManager; import net.eleritec.docking.DockingPort; import net.eleritec.docking.defaults.ComponentProviderAdapter; import net.eleritec.docking.defaults.DefaultDockingPort; public class SplitPaneDemo extends JPanel {   private JLabel titlebar;   private Dockable dockableImpl;      public SplitPaneDemo(String title) {     super();     titlebar = createTitlebar(" " + title);     add(titlebar);     setBorder(new LineBorder(Color.black));     dockableImpl = new DockableImpl();   }      private JLabel createTitlebar(String title) {     JLabel lbl = new JLabel(title);     lbl.setForeground(Color.white);     lbl.setBackground(Color.blue);     lbl.setOpaque(true);     return lbl;   }      public void doLayout() {     Insets in = getInsets();     titlebar.setBounds(in.left, in.top, getWidth()-in.left-in.right, 25);   }      private Dockable getDockable() {     return dockableImpl;   }      private SplitPaneDemo getThis() {     return this;   }      private class DockableImpl extends DockableAdapter {     public Component getDockable() {       return getThis();     }     public String getDockableDesc() {       return titlebar.getText().trim();     }     public Component getInitiator() {       // the titlebar will the the 'hot' component that initiates dragging       return titlebar;     }   }      private static class ComponentProvider extends ComponentProviderAdapter {     public DockingPort createChildPort() {       DefaultDockingPort port = new DefaultDockingPort();       port.setComponentProvider(this);       return port;     }     public JSplitPane createSplitPane() {       JSplitPane split = new JSplitPane();       // remove the border from the split pane       split.setBorder(null);       // set the divider size for a more reasonable, less bulky look        split.setDividerSize(3);       // check the UI.  If we can't work with the UI any further, then       // exit here.       if (!(split.getUI() instanceof BasicSplitPaneUI))         return split;       //  grab the divider from the UI and remove the border from it       BasicSplitPaneDivider divider = ((BasicSplitPaneUI) split.getUI()).getDivider();       if (divider != null)         divider.setBorder(null);       return split;     } }                     private static JPanel createContentPane() {     JPanel p = new JPanel(new BorderLayout(5, 5));     p.add(buildDockingPort("North"), BorderLayout.NORTH);     p.add(buildDockingPort("South"), BorderLayout.SOUTH);     p.add(buildDockingPort("East"), BorderLayout.EAST);     p.add(buildDockingPort("West"), BorderLayout.WEST);     p.add(createDockingPort(), BorderLayout.CENTER);     return p;   }      private static DefaultDockingPort buildDockingPort(String desc) {     // create the DockingPort     DefaultDockingPort port = createDockingPort();          // create the Dockable panel     SplitPaneDemo spd = new SplitPaneDemo(desc);     DockingManager.registerDockable(spd.getDockable());     // dock the panel and return the DockingPort     port.dock(spd.getDockable(), DockingPort.CENTER_REGION);     return port;   }      private static DefaultDockingPort createDockingPort() {     DefaultDockingPort port = new DefaultDockingPort();     port.setBackground(Color.gray);     port.setPreferredSize(new Dimension(100, 100));     port.setComponentProvider(new ComponentProvider());     return port;   }      public static void main(String[] args) {     JFrame f = new JFrame("Split Docking Demo");     f.setContentPane(createContentPane());     f.setSize(600, 400);     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     f.setVisible(true);   } }                     dockingSrc-0.3.zip( 57 k)