`
juforg
  • 浏览: 45573 次
  • 性别: 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  

相关推荐

    spark最新源码以及二次开发教程

    《Spark最新源码与二次开发详解》 Spark作为一款开源的大数据处理框架,因其高效、易用和灵活性而备受开发者青睐。在Openfire环境中,Spark更扮演着关键的角色,为实时通讯提供支持。本教程旨在深入解析Spark的最新...

    基于spark的大数据论文资料

    本资料是集合20篇知网被引最高的基于spark的大数据论文,包括大数据Spark技术研究_刘峰波、大数据下基于Spark的电商实时推荐系统的设计与实现_岑凯伦、基于Spark的Apriori算法的改进_牛海玲、基于Spark的大数据混合...

    大数据资料Spark\HBase\HDFS 二次开发 PPT

    这份压缩包文件包含了一系列关于大数据技术的PPT和PDF文档,主要聚焦于Spark、HBase、HDFS的二次开发以及相关的技术,如Hive、Kafka、Solr和MapReduce等。以下是这些资源中涉及的主要知识点: 1. **Spark二次开发**...

    大数据Spark二次开发.pdf

    大数据Spark二次开发 大数据Spark二次开发是指使用Apache Spark进行大数据处理和分析的过程。Spark是基于内存的计算引擎,可以快速处理大量数据。 Spark任务运行流程 Spark任务运行流程包括以下几个步骤: 1. ...

    openfire + spark 开发

    在本文中,我们将讨论基于 Openfire 和 Spark 的 XMPP IM 软件开发。我们将从 XMPP 协议的介绍开始,接着讨论如何使用 Spark 和 Openfire 来实现一个完整的 IM 软件开发。 什么是 XMPP? XMPP(Extensible ...

    spark+openfire二次开发(三)

    《Spark+Openfire二次开发(三):深入理解与实践》 在IT行业中,Spark和Openfire是两个非常重要的开源工具,它们分别在大数据处理和即时通讯领域有着广泛的应用。本篇文章将深入探讨如何对这两者进行二次开发,...

    spark+openfire二次开发

    Spark+Openfire 二次开发详解 Spark 和 Openfire 是两个基于 Java 的即时通讯平台,分别由 Apache 和 Ignite Realtime 开发。Spark 是一个基于 XMPP 协议的即时通讯客户端,而 Openfire 是一个基于 XMPP 协议的...

    基于spark的电影点评系统

    **基于Spark的电影点评系统详解** 本项目是一个大三下学期的课程设计,核心是利用Apache Spark构建一个电影点评系统,旨在对用户的行为数据进行分析,以便为用户提供个性化的电影推荐。Spark作为大数据处理框架,以...

    基于Spark大数据环境开发的二手房分析和预测系统源码设计.rar

    基于Spark大数据环境开发的二手房分析和预测系统源码设计 基于Spark大数据环境开发的二手房分析和预测系统源码设计 基于Spark大数据环境开发的二手房分析和预测系统源码设计 基于Spark大数据环境开发的二手房分析和...

    基于Spark的电影推荐系统的设计与实现.docx

    基于Spark的电影推荐系统的设计与实现.docx基于Spark的电影推荐系统的设计与实现.docx基于Spark的电影推荐系统的设计与实现.docx基于Spark的电影推荐系统的设计与实现.docx基于Spark的电影推荐系统的设计与实现.docx...

    基于Spark的电影推荐系统

    本课程论文阐述了spark和spark集成开发环境Intellij IDEA的安装与操作,也详细说明了基于Spark的电影推荐系统的开发流程。推荐引擎是最常用的机器学校应用,我们可以在各大购物网站上看到这方面的应用。基于Spark的...

    基于Spark的电商用户分析系统-开题报告.pdf

    基于Spark的电商用户分析系统的系统架构包括基于Centos 6.8系统的CDH 5.3搭建,Spark大数据平台使用Cloudera公司的CDH 5.3一体化大数据平台,使用Echart、JAVAEE编程语言:Java、JSP、JavaScript开发工具:Eclipse等...

    基于spark的外卖大数据平台分析系统.zip

    《基于Spark的外卖大数据平台分析系统》 在当今数字化时代,大数据分析已成为各行各业的重要工具,尤其是在餐饮服务领域,外卖业务的兴起催生了对外卖大数据处理的强烈需求。Apache Spark作为一个高效、通用的大...

    基于Spark Streaming的大数据实时流计算平台和框架,并且是基于运行在yarn模式运行的spark streaming

    一个完善的Spark Streaming二次封装开源框架,包含:实时流任务调度、kafka偏移量管理,web后台管理,web api启动、停止spark streaming,宕机告警、自动重启等等功能支持,用户只需要关心业务代码,无需关注繁琐的...

    基于Spark的全球新冠疫情系统的分析与实现

    《基于Spark的全球新冠疫情系统的分析与实现》 在大数据时代,快速、高效地处理和分析海量数据成为关键。Apache Spark作为一个分布式计算框架,以其高效的数据处理能力,成为了大数据领域的重要工具。本文将深入...

    基于Spark架构开发的电影推荐系统源码.zip

    基于Spark架构开发的电影推荐系统源码.zip基于Spark架构开发的电影推荐系统源码.zip基于Spark架构开发的电影推荐系统源码.zip基于Spark架构开发的电影推荐系统源码.zip基于Spark架构开发的电影推荐系统源码.zip基于...

    IM, spark 分析代码

    本主题聚焦于"IM, spark 分析代码",这通常涉及到即时通讯(IM)系统的数据处理,以及如何利用Apache Spark进行高效分析。IMClient-master可能是一个包含IM客户端源代码的项目,而IMProject.userlibraries可能包含了...

    spark笔记整理文档

    本篇笔记将深入探讨Spark的核心概念、架构设计以及实际应用,旨在帮助读者全面理解并掌握Spark。 1. Spark概述: Spark最初由加州大学伯克利分校AMPLab开发,其设计理念是提供一个快速、通用且可扩展的大数据处理...

    人工智能-spark-基于Spark对全国历史气象数据的分析

    基于Spark对全国历史气象数据的分析 用PySpark处理数据 将所有文件读为一个****RDD rdd = sc.wholeTextFiles("file:///" + os.getcwd() + "/china/") **数据清洗 ** 去除字母, -9999等无效数据 进行计算、排序等...

    基于spark的商品推荐系统.zip

    基于spark的商品推荐系统基于spark的商品推荐系统基于spark的商品推荐系统基于spark的商品推荐系统基于spark的商品推荐系统基于spark的商品推荐系统基于spark的商品推荐系统基于spark的商品推荐系统基于spark的商品...

Global site tag (gtag.js) - Google Analytics