- 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)); } } }
效果图:
相关推荐
《Spark最新源码与二次开发详解》 Spark作为一款开源的大数据处理框架,因其高效、易用和灵活性而备受开发者青睐。在Openfire环境中,Spark更扮演着关键的角色,为实时通讯提供支持。本教程旨在深入解析Spark的最新...
本资料是集合20篇知网被引最高的基于spark的大数据论文,包括大数据Spark技术研究_刘峰波、大数据下基于Spark的电商实时推荐系统的设计与实现_岑凯伦、基于Spark的Apriori算法的改进_牛海玲、基于Spark的大数据混合...
这份压缩包文件包含了一系列关于大数据技术的PPT和PDF文档,主要聚焦于Spark、HBase、HDFS的二次开发以及相关的技术,如Hive、Kafka、Solr和MapReduce等。以下是这些资源中涉及的主要知识点: 1. **Spark二次开发**...
大数据Spark二次开发 大数据Spark二次开发是指使用Apache Spark进行大数据处理和分析的过程。Spark是基于内存的计算引擎,可以快速处理大量数据。 Spark任务运行流程 Spark任务运行流程包括以下几个步骤: 1. ...
在本文中,我们将讨论基于 Openfire 和 Spark 的 XMPP IM 软件开发。我们将从 XMPP 协议的介绍开始,接着讨论如何使用 Spark 和 Openfire 来实现一个完整的 IM 软件开发。 什么是 XMPP? XMPP(Extensible ...
《Spark+Openfire二次开发(三):深入理解与实践》 在IT行业中,Spark和Openfire是两个非常重要的开源工具,它们分别在大数据处理和即时通讯领域有着广泛的应用。本篇文章将深入探讨如何对这两者进行二次开发,...
Spark+Openfire 二次开发详解 Spark 和 Openfire 是两个基于 Java 的即时通讯平台,分别由 Apache 和 Ignite Realtime 开发。Spark 是一个基于 XMPP 协议的即时通讯客户端,而 Openfire 是一个基于 XMPP 协议的...
**基于Spark的电影点评系统详解** 本项目是一个大三下学期的课程设计,核心是利用Apache Spark构建一个电影点评系统,旨在对用户的行为数据进行分析,以便为用户提供个性化的电影推荐。Spark作为大数据处理框架,以...
基于Spark大数据环境开发的二手房分析和预测系统源码设计 基于Spark大数据环境开发的二手房分析和预测系统源码设计 基于Spark大数据环境开发的二手房分析和预测系统源码设计 基于Spark大数据环境开发的二手房分析和...
基于Spark的电影推荐系统的设计与实现.docx基于Spark的电影推荐系统的设计与实现.docx基于Spark的电影推荐系统的设计与实现.docx基于Spark的电影推荐系统的设计与实现.docx基于Spark的电影推荐系统的设计与实现.docx...
本课程论文阐述了spark和spark集成开发环境Intellij IDEA的安装与操作,也详细说明了基于Spark的电影推荐系统的开发流程。推荐引擎是最常用的机器学校应用,我们可以在各大购物网站上看到这方面的应用。基于Spark的...
基于Spark的电商用户分析系统的系统架构包括基于Centos 6.8系统的CDH 5.3搭建,Spark大数据平台使用Cloudera公司的CDH 5.3一体化大数据平台,使用Echart、JAVAEE编程语言:Java、JSP、JavaScript开发工具:Eclipse等...
《基于Spark的外卖大数据平台分析系统》 在当今数字化时代,大数据分析已成为各行各业的重要工具,尤其是在餐饮服务领域,外卖业务的兴起催生了对外卖大数据处理的强烈需求。Apache Spark作为一个高效、通用的大...
一个完善的Spark Streaming二次封装开源框架,包含:实时流任务调度、kafka偏移量管理,web后台管理,web api启动、停止spark streaming,宕机告警、自动重启等等功能支持,用户只需要关心业务代码,无需关注繁琐的...
《基于Spark的全球新冠疫情系统的分析与实现》 在大数据时代,快速、高效地处理和分析海量数据成为关键。Apache Spark作为一个分布式计算框架,以其高效的数据处理能力,成为了大数据领域的重要工具。本文将深入...
基于Spark架构开发的电影推荐系统源码.zip基于Spark架构开发的电影推荐系统源码.zip基于Spark架构开发的电影推荐系统源码.zip基于Spark架构开发的电影推荐系统源码.zip基于Spark架构开发的电影推荐系统源码.zip基于...
本主题聚焦于"IM, spark 分析代码",这通常涉及到即时通讯(IM)系统的数据处理,以及如何利用Apache Spark进行高效分析。IMClient-master可能是一个包含IM客户端源代码的项目,而IMProject.userlibraries可能包含了...
本篇笔记将深入探讨Spark的核心概念、架构设计以及实际应用,旨在帮助读者全面理解并掌握Spark。 1. Spark概述: Spark最初由加州大学伯克利分校AMPLab开发,其设计理念是提供一个快速、通用且可扩展的大数据处理...
基于Spark对全国历史气象数据的分析 用PySpark处理数据 将所有文件读为一个****RDD rdd = sc.wholeTextFiles("file:///" + os.getcwd() + "/china/") **数据清洗 ** 去除字母, -9999等无效数据 进行计算、排序等...
基于spark的商品推荐系统基于spark的商品推荐系统基于spark的商品推荐系统基于spark的商品推荐系统基于spark的商品推荐系统基于spark的商品推荐系统基于spark的商品推荐系统基于spark的商品推荐系统基于spark的商品...