【基于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. }  
 

 效果图:



转载于:https://www.cnblogs.com/juforg/p/3255858.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值