zoukankan      html  css  js  c++  java
  • 【基于spark IM 的二次开发笔记】第二天 树形结构

    • MessageTreePlugin.java
    Java代码 复制代码
    1. final MessageTreeTab messageTreeTab = new MessageTreeTab();   
    2.     /**  
    3.      * Adds a tab to Spark  
    4.      */  
    5.     private void addTabToSpark(){   
    6.          // Get Workspace UI from SparkManager   
    7.         Workspace workspace = SparkManager.getWorkspace();   
    8.   
    9.         // Retrieve the Tabbed Pane from the WorkspaceUI.   
    10.         SparkTabbedPane tabbedPane = workspace.getWorkspacePane();   
    11.   
    12.         // Add own Tab.   
    13.         tabbedPane.addTab("消息"null,<SPAN style="COLOR: #ff0000">messageTreeTab</SPAN>);   
    14.         //messageTreeTab.invokeDialog();   
    15.     }  
    •  MessageTreeTab.java
    Java代码 复制代码
    1. public class MessageTreeTab extends JPanel {   
    2.   
    3.     private static final long serialVersionUID = -381458717030745122L;   
    4.     private JiveTreeNode msgType;   
    5.     private List<JiveTreeNode> groupNodes = new ArrayList<JiveTreeNode>();   
    6.     private MessageTree msgTree;   
    7.     private JiveTable messageType;   
    8.        
    9.        
    10.     public MessageTreeTab(){   
    11.         setLayout(new GridBagLayout());   
    12.         msgType = new JiveTreeNode("分类");   
    13.         msgTree = <SPAN style="COLOR: #ff0000">new MessageTree</SPAN>(msgType);   
    14.         msgTree.setPreferredSize(new Dimension(150400));   
    15.         String groupName = Res.getString("status.online");   
    16.            
    17.            
    18.         String[] headers = new String[]{"类型","时间","内容"};   
    19.            
    20.          messageType = new JiveTable(headers, null);   
    21.          messageType.setPreferredSize(new Dimension(350400));   
    22.          final JScrollPane pane = new JScrollPane(messageType);   
    23.          pane.setBorder(BorderFactory.createTitledBorder(Res.getString("label.message").replace("&""")));   
    24.             
    25.          final JScrollPane treePane = new JScrollPane(msgTree);   
    26.             treePane.setBorder(BorderFactory.createTitledBorder(Res.getString("message.send.to.these.people")));   
    27. //          treePane.getVerticalScrollBar().setBlockIncrement(200);   
    28. //          treePane.getVerticalScrollBar().setUnitIncrement(20);   
    29.                
    30.          // Add to UI   
    31.             add(treePane, new GridBagConstraints(00110.51.0, GridBagConstraints.WEST, GridBagConstraints.BOTH, new Insets(5550), 00));   
    32.             add(pane, new GridBagConstraints(10130.51.0, GridBagConstraints.WEST, GridBagConstraints.BOTH, new Insets(2025), 00));   
    33.                
    34.                
    35.             msgTree.expandTree();   
    36.     }   
    37.        
    38.     /**  
    39.      * Displays the message tree dialog.  
    40.      */  
    41.     public void invokeDialog() {   
    42.             
    43.         JiveTreeNode groupNode = new JiveTreeNode("通知类型1");   
    44.         groupNode.add( new JiveTreeNode("通知类型11"));   
    45.         groupNode.add(new JiveTreeNode("通知类型12"));   
    46.         groupNode.add(new JiveTreeNode("通知类型13"));   
    47.         groupNode.add(new JiveTreeNode("通知类型14"));   
    48.         groupNode.add(new JiveTreeNode("通知类型15"));   
    49.         JiveTreeNode groupNode2 = new JiveTreeNode("通知类型2");   
    50.         groupNode2.add( new JiveTreeNode("通知类型21"));   
    51.         groupNode2.add(new JiveTreeNode("通知类型22"));   
    52.         groupNode2.add(new JiveTreeNode("通知类型23"));   
    53.         groupNode2.add(new JiveTreeNode("通知类型24"));   
    54.         groupNode2.add(new JiveTreeNode("通知类型25"));   
    55.         msgType.add(groupNode);   
    56.         msgType.add(groupNode2);   
    57.     }   
    58. }  
    •  MessageTree.java
    Java代码 复制代码
    1. public class MessageTree extends JPanel {   
    2.   
    3.     private static final long serialVersionUID = 5992552368286729600L;   
    4.   
    5.      private Tree tree;   
    6.        
    7.     public MessageTree(JiveTreeNode rootNode) {   
    8.          tree = new Tree(rootNode);   
    9.          tree.setCellRenderer(new DefaultTreeCellRenderer());   
    10.         tree.setRowHeight(18);   
    11.         tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);   
    12.         tree.setToggleClickCount(1000);   
    13.         tree.putClientProperty("JTree.lineStyle""Angled");   
    14.         tree.addMouseListener(new NodeSelectionListener(tree));   
    15.   
    16.         setLayout(new BorderLayout());   
    17.         add(tree);   
    18.     }   
    19.   
    20.     class NodeSelectionListener extends MouseAdapter {   
    21.         JTree tree;   
    22.   
    23.         NodeSelectionListener(JTree tree) {   
    24.             this.tree = tree;   
    25.         }   
    26.   
    27.         public void mouseClicked(MouseEvent e) {   
    28.             int x = e.getX();   
    29.             int y = e.getY();   
    30.             int row = tree.getRowForLocation(x, y);   
    31.             TreePath path = tree.getPathForRow(row);   
    32.             if (path != null) {   
    33.                 JiveTreeNode node = (JiveTreeNode)path.getLastPathComponent();   
    34.                     if (!node.isLeaf()) {   
    35.                         tree.expandPath(path);   
    36.                     }   
    37.                     else {   
    38.                         tree.collapsePath(path);   
    39.                     }   
    40.                 ((DefaultTreeModel)tree.getModel()).nodeChanged(node);   
    41.                 // I need revalidate if node is root.  but why?   
    42.   
    43.                 tree.revalidate();   
    44.                 tree.repaint();   
    45.   
    46.             }   
    47.         }   
    48.     }   
    49.   
    50.     public JTree getTree() {   
    51.         return tree;   
    52.     }   
    53.        
    54.     /**  
    55.      * Call to expand the entire tree.  
    56.      */  
    57.     public void expandTree() {   
    58.         for (int i = 0; i <= tree.getRowCount(); i++) {   
    59.             tree.expandPath(tree.getPathForRow(i));   
    60.         }   
    61.     }   
    62. }  

     效果图:



  • 相关阅读:
    Oracle数据库的经典问题 snapshot too old是什么原因引起的
    在服务器上排除问题的头五分钟
    MySQL的redo log结构和SQL Server的log结构对比
    MySQL优化---DBA对MySQL优化的一些总结
    事务分类
    扩展HT for Web之HTML5表格组件的Renderer和Editor
    iOS平台快速发布HT for Web拓扑图应用
    HT for Web的HTML5树组件延迟加载技术实现
    Zip 压缩、解压技术在 HTML5 浏览器中的应用
    百度地图、ECharts整合HT for Web网络拓扑图应用
  • 原文地址:https://www.cnblogs.com/juforg/p/3255858.html
Copyright © 2011-2022 走看看