`
juforg
  • 浏览: 44655 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

【基于spark IM 的二次开发笔记】第二天 树形结构

阅读更多
  • MessageTreePlugin.java

 

final MessageTreeTab messageTreeTab = new MessageTreeTab();
    /**
     * Adds a tab to Spark
     */
    private void addTabToSpark(){
         // Get Workspace UI from SparkManager
        Workspace workspace = SparkManager.getWorkspace();

        // Retrieve the Tabbed Pane from the WorkspaceUI.
        SparkTabbedPane tabbedPane = workspace.getWorkspacePane();

        // Add own Tab.
        tabbedPane.addTab("消息", null,messageTreeTab);
        //messageTreeTab.invokeDialog();
    }
  •  MessageTreeTab.java
public class MessageTreeTab extends JPanel {

	private static final long serialVersionUID = -381458717030745122L;
	private JiveTreeNode msgType;
	private List<JiveTreeNode> groupNodes = new ArrayList<JiveTreeNode>();
	private MessageTree msgTree;
	private JiveTable messageType;
	
	
	public MessageTreeTab(){
		setLayout(new GridBagLayout());
		msgType = new JiveTreeNode("分类");
		msgTree = new MessageTree(msgType);
		msgTree.setPreferredSize(new Dimension(150, 400));
		String groupName = Res.getString("status.online");
		
		
		String[] headers = new String[]{"类型","时间","内容"};
		
		 messageType = new JiveTable(headers, null);
		 messageType.setPreferredSize(new Dimension(350, 400));
		 final JScrollPane pane = new JScrollPane(messageType);
	     pane.setBorder(BorderFactory.createTitledBorder(Res.getString("label.message").replace("&", "")));
	     
	     final JScrollPane treePane = new JScrollPane(msgTree);
	        treePane.setBorder(BorderFactory.createTitledBorder(Res.getString("message.send.to.these.people")));
//	        treePane.getVerticalScrollBar().setBlockIncrement(200);
//	        treePane.getVerticalScrollBar().setUnitIncrement(20);
	        
	     // Add to UI
	        add(treePane, new GridBagConstraints(0, 0, 1, 1, 0.5, 1.0, GridBagConstraints.WEST, GridBagConstraints.BOTH, new Insets(5, 5, 5, 0), 0, 0));
	        add(pane, new GridBagConstraints(1, 0, 1, 3, 0.5, 1.0, GridBagConstraints.WEST, GridBagConstraints.BOTH, new Insets(2, 0, 2, 5), 0, 0));
	        
	        
	        msgTree.expandTree();
	}
	
	/**
     * Displays the message tree dialog.
     */
    public void invokeDialog() {
    	 
    	JiveTreeNode groupNode = new JiveTreeNode("通知类型1");
		groupNode.add( new JiveTreeNode("通知类型11"));
		groupNode.add(new JiveTreeNode("通知类型12"));
		groupNode.add(new JiveTreeNode("通知类型13"));
		groupNode.add(new JiveTreeNode("通知类型14"));
		groupNode.add(new JiveTreeNode("通知类型15"));
		JiveTreeNode groupNode2 = new JiveTreeNode("通知类型2");
		groupNode2.add( new JiveTreeNode("通知类型21"));
		groupNode2.add(new JiveTreeNode("通知类型22"));
		groupNode2.add(new JiveTreeNode("通知类型23"));
		groupNode2.add(new JiveTreeNode("通知类型24"));
		groupNode2.add(new JiveTreeNode("通知类型25"));
		msgType.add(groupNode);
		msgType.add(groupNode2);
    }
}
  •  MessageTree.java
public class MessageTree extends JPanel {

	private static final long serialVersionUID = 5992552368286729600L;

	 private Tree tree;
	
	public MessageTree(JiveTreeNode rootNode) {
		 tree = new Tree(rootNode);
		 tree.setCellRenderer(new DefaultTreeCellRenderer());
        tree.setRowHeight(18);
        tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
        tree.setToggleClickCount(1000);
        tree.putClientProperty("JTree.lineStyle", "Angled");
        tree.addMouseListener(new NodeSelectionListener(tree));

        setLayout(new BorderLayout());
        add(tree);
	}

	class NodeSelectionListener extends MouseAdapter {
        JTree tree;

        NodeSelectionListener(JTree tree) {
            this.tree = tree;
        }

        public void mouseClicked(MouseEvent e) {
            int x = e.getX();
            int y = e.getY();
            int row = tree.getRowForLocation(x, y);
            TreePath path = tree.getPathForRow(row);
            if (path != null) {
            	JiveTreeNode node = (JiveTreeNode)path.getLastPathComponent();
                    if (!node.isLeaf()) {
                        tree.expandPath(path);
                    }
                    else {
                        tree.collapsePath(path);
                    }
                ((DefaultTreeModel)tree.getModel()).nodeChanged(node);
                // I need revalidate if node is root.  but why?

                tree.revalidate();
                tree.repaint();

            }
        }
    }

    public JTree getTree() {
        return tree;
    }
    
    /**
     * Call to expand the entire tree.
     */
    public void expandTree() {
        for (int i = 0; i <= tree.getRowCount(); i++) {
            tree.expandPath(tree.getPathForRow(i));
        }
    }
}

 效果图:



 

 

  • 大小: 12.5 KB
分享到:
评论
1 楼 臧圩人 2013-05-21  

相关推荐

Global site tag (gtag.js) - Google Analytics