zoukankan      html  css  js  c++  java
  • javaDocking 学习

    官网

    http://www.javadocking.com/

    最近接触了JavaDocking这一个东东

    http://www.javadocking.com/gettingstarted/index.html

    网上搜了搜没有什么好的中文参考,只好自己练习理解了

    javaDocking的类继承了JPanel

    就这个例子先熟悉一下JavaDocking(效果图如下)

    主要代码如下

     定义主方法

    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);
        }
        public FirstExample(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.
            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));
            
            // Add the 3 root docks to the dock model.
            dockModel.addRootDock("topdock", topSplitDock, frame);
            dockModel.addRootDock("bottomdock", bottomSplitDock, frame);
            dockModel.addRootDock("rightdock", rightSplitDock, frame);
                
            // 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());
    
            // Create the split panes.
            JSplitPane leftSplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
            leftSplitPane.setDividerLocation(250);
            JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
            splitPane.setDividerLocation(400);
    
            // Add the root docks to the split panes.
            leftSplitPane.setLeftComponent(topSplitDock);
            leftSplitPane.setRightComponent(bottomSplitDock);
            splitPane.setLeftComponent(leftSplitPane);
            splitPane.setRightComponent(rightSplitDock);
            
            // Add the split pane to the panel.
            add(splitPane, BorderLayout.CENTER);
            
        }
        
        /**
         * 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);
            }
        }

     现在看下另一个比较复杂的例子

    效果图如下:

    这个例子综合的显示了开发中需要的各种组件

    一个javadocking 基本结构图

    下面就开始分析上图的例子的源码

    主界面结构分析

    1     主要的类

      ServerMainFrame

    1.1   定义宽

        public static final int FRAME_WIDTH = 900;

    1.2   高

        public static final int FRAME_HEIGHT = 650;

    1.3   设置主题

    public static LAF[] LAFS;

    1.4   存放应用界面的数组

    private Dockable[] dockables;

       通过

     Dockable createDockable(String id, Component content, String title,

               Icon icon, String description)

       这个方法添加各个应用组件。

    1.4.1   如果想让浮动界面不能最大化的话,用下面的代码即可:

    ((DefaultDockable) dockables[10])

                  .setPossibleStates(DockableState.CLOSED | DockableState.NORMAL

                         | DockableState.MINIMIZED | DockableState.EXTERNALIZED);

    1.4.2   可以为各个应用添加监听代码

    for (int index = 0; index < dockables.length; index++) {

               if (index == 10) {

                  // All actions, except the maximize.

                  dockables[index] = addLimitActions(dockables[index]);

               } else {

                  // All actions.

                  dockables[index] = addAllActions(dockables[index]);

               }

           }

    1.5   存放按钮界面的数组

        private Dockable[] buttonDockables;

            通过

    private Dockable createButtonDockable(String id, String title, Icon icon,

               String message)

    来添加按钮

    2     设置的布局方式为

               BorderLayout();

    3     dockModel 为FloatSockModel

    new FloatDockModel("workspace.dck");

    workspace.dck 不晓得在哪

    dockModel存放了SplitDock,BorderDock

    方法入下:

    dockModel.addRootDock("totalDock", totalSplitDock, frame);

    dockModel.addRootDock("toolBarBorderDock", toolBarBorderDock, frame);

    4     FloatDock

        他是有dockModel得来的,是漂浮窗的容器

    floatDock = dockModel.getFloatDock(frame);

    设置的布局方式为

        floatDock.setChildDockFactory(new LeafDockFactory(false));

    floatDock 添加Dockable

    5     TableDock

    TableDock 存放每个应用组件Dockable,这些组件不是漂浮的

    调用的是

    .addDockable(dockables[0], new Position(0));

    6     SplitDock

    SplitDock存放了TableDock

    .addChildDock(centerTabbedDock, new Position(

                    Position.CENTER));

    7     SingleMaximizer

      他的构造方法将SplitDock传进去了

    SingleMaximizer maximizePanel = new SingleMaximizer(totalSplitDock);

    DockModel可以设置他?

    dockModel.addVisualizer("maximizer", maximizePanel, frame);

    8     BorderDock

      这是对toolbar 的容器

    他有如下的方法

       .setMode(BorderDock.MODE_MINIMIZE_BAR);

    .setMode(BorderDock.MODE_TOOL_BAR);

       .setCenterComponent(maximizePanel);

    9     BorderDocker

      .setBorderDock(minimizerBorderDock);

    10   DockingMinimizer

      他的传值为BorderDocker

    new DockingMinimizer(borderDocker);

    dockModel.addVisualizer("minimizer", minimizer, frame);

    dockModel.addVisualizer("externalizer", new FloatExternalizer(frame),

                frame);

    11   CompositeLineDock

    按钮容器

    他的构造方法是:

    new CompositeLineDock(

                    CompositeLineDock.ORIENTATION_HORIZONTAL, false,

                    new ToolBarDockFactory(), DockingMode.HORIZONTAL_TOOLBAR,

                    DockingMode.VERTICAL_TOOLBAR);

    12   LineDock

     构造方法是

      new LineDock(LineDock.ORIENTATION_HORIZONTAL,

                    false, DockingMode.HORIZONTAL_TOOLBAR,

                    DockingMode.VERTICAL_TOOLBAR);

    他用如下方法添加按钮

    .addDockable(buttonDockables[0], new Position(0));

     

    13   GridDock

      存放按钮组件的

      new GridDock(DockingMode.TOOL_GRID);

    14   DockingPath

     

    15   整体结构示意图

     

     

    16   Book组件

         构造方法为(定义了标题,内容,图片)

           public Book(String title, String text, Icon picture)

    17   Table 组件

    18   ContactTree 组件

    19   Find组件

    20   Picture组件

    21   Chart 组件

    22   WordList组件

    /////////////////////////////////////////////////////////////////////////////////////////////////////////////

    看完例子,接下来就是一边学习,一边开发了

     javadocking  开发需要jdk  1.4 以上版本

     (一) JPanel

       这个Swing开发中接触最多的东东,在javaDocking中jPanel是 放在dockable中的,官网例子有好多的这里列出简单的几个

      (a) 一个简单的图片Panel

    import java.awt.Graphics;
    import java.awt.image.BufferedImage;
    import java.io.File;
    
    import javax.imageio.ImageIO;
    import javax.swing.JPanel;
    
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    
    /**
     * 
     * @author tao 2013年3月14日14:15:04
     */
    public class PicturePanel extends JPanel {
        private static Log log = LogFactory.getLog(PicturePanel.class);
        private static final long serialVersionUID = 1L;
        private  String picture;
    
        
        
        
        public  String getPicture() {
            return picture;
        }
    
    
        public  void setPicture(String picture) {
            this.picture = picture;
        }
    
    
        public PicturePanel(String temppicture) {
            this.picture = temppicture;
        }
        
        
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            BufferedImage bu = null;
            try {
                bu = ImageIO.read(new File(picture));
            } catch (Exception e) {
                log.info(e);
            }
            g.drawImage(bu, 0, 0, getSize().width,
                     getSize().height, this);
        }
    
    }

      (二)dockable

     

     

     

  • 相关阅读:
    硬币游戏 Project Euler 232
    屏幕空间的近似全局光照明(Approximative Global Illumination in Screen Space)
    四维之美
    vertex texture fetching in HLSL, and heightfield normal calculation
    一个VS小插件(跳出括号)
    我的算法书籍收藏
    Algorithms.算法概论.习题答案
    UML用例图教程详解
    大连理工大学软件学院博客地址
    快递查询API,我推荐“爱快递”
  • 原文地址:https://www.cnblogs.com/tomcattd/p/2956121.html
Copyright © 2011-2022 走看看