重开博客,附上源码链接 ,再看那时候的代码写的不太好注释不全面,大家先参考着,后续有时间再重写。求star~
附件是将之前(见我早些时候的博客)写的网络拓扑插件的第二版,增加了一些功能,同时将图标变小,可以迅速显示数百个网络元素,实现快速点击定位等操作,同时还可以在界面自定义添加一些如按钮菜单项等组件。
使用手册目录结构(每个标题下都带有代码例子):
还包括添加告警,告警级别设定,初始化指定方向箭头等功能。
这里贴一段 鼠标事件定义方法的说明(摘自“使用说明”):
使用插件默认的鼠标事件类,则双击网络元素(链路或路由器交换机图标)会弹出一个窗口显示初始化时设定的名字或内容信息,右键元素会出现一个列表(有右键对象,添加告警,删除告警项)
1. 继承MyMouseAction 类,重写
public void showMenu(MouseEvent e, Component com)方法来控制鼠标右键点击网络元素显示的内容。
例
import java.awt.Component;
import java.awt.event.MouseEvent;
import javax.swing.JPopupMenu;
publicclass MyAction extends MyMouseAction
{
publicvoid showMenu(MouseEvent e, Component com)//名字不能改变!
{
JPopupMenu popupMenu = new JPopupMenu();//定义一个弹出菜单
if (com instanceof TopoLink) { //如果传入对象是TopoLink实例
TopoLink tl = (TopoLink) com;
popupMenu.add("右键对象:" + tl.getLnode().getText() + "——"
+ tl.getRnode().getText());
} elseif (com instanceof TopoNode) { //如果传入对象是TopoNode实例
popupMenu.add("右键对象:" + ((TopoNode) com).getText());
}
popupMenu.addSeparator();//分隔符
popupMenu.show(e.getComponent(), e.getX(), e.getY());//显示弹出框
}
}
注:然后要调用d.setMyAction(new MyAction());
2. 继承MyMouseAction 类,重写public void showDialog(MouseEvent e, Component com),定义左键双击网络元素显示的内容,如弹框等,例子将在下面给出。
3. public void setMode(boolean mode)
//设置右上方tab切换时候显示的模式,针对各个界面都用一种网络拓扑的情况设计,如果设置//true,则各个界面显示的拓扑结构都与第一个界面相同,如各个界面共用同一拓扑结构,
//只是在拓扑结构上显示的路径不同,这种情况下只要将拓扑结构中的元素添加到第一个界面//即可(不用每个界面都加一遍);默认为false,则各个界面的拓扑元素都要分别添加。
例:
MyMouseAction actions = new MyMouseAction ();
actions.setMode(true);//设置模式
DrawGraph topoView = new DrawGraph("窗口");
topoView.setMyAction(actions);
注:这里可能不好理解,一下举一个需要设置mode的情况,如图1:
点击“界面2”图2:
两个界面三个元素位置相同(现网中拓扑结构应该比这个复杂很多),但是两个界面只是展示的路径不同。
多说一句:程序设计中可以定义一个类似
Map<Integer, ArrayList<TopoLink>> colorLinks;
的结构来保存不同面板号对应需要显示的连接对象列表,然后需要自己实现并覆盖MyMouseAction中的下述两个方法:
public void drawColorLines(int tabIndex)
public void clearColorLines(int tabIndex)
讲解如下:
以下两个方法是右上方tab切换时候执行的动作
4. 继承MyMouseAction 类,重写public void drawColorLines(int tabIndex)
传入右侧上方tab的索引值(从0起计数)则画出
Map<Integer, ArrayList<TopoLink>> colorLinks;(自定义)中tab索引值对应的链路列表。
5. 承MyMouseAction 类,重写public void clearColorLines(int tabIndex)
传入右侧上方tab的索引值(从0起计数),清除
Map<Integer, ArrayList<TopoLink>> colorLinks;(自定义)中tab索引值对应的链路列表。
注:这两个方法都是在public void setMode(boolean mode)模式设置为true时才会被执行到,先执行clearColorLines(lastTabIndex);(即先清除上一个面板上内容),再
drawColorLines(currentTabIndex);(即再传入要展示的面板的索引值,画出相应内容);
为了便于理解,以下贴出简单实现的代码:
import java.awt.Component;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import javax.swing.JLayeredPane;
publicclass Demo extends MyMouseAction
{
//tab索引号——链路列表映射
Map<Integer, ArrayList<TopoLink>> colorLinks;
public Demo()
{
colorLinks = new HashMap<Integer, ArrayList<TopoLink>>();
}
/**
* @return Returns the colorLinks.
*/
public Map<Integer, ArrayList<TopoLink>> getColorLinks()
{
returncolorLinks;
}
/**
* @param colorLinks The colorLinks to set.
*/
publicvoid setColorLinks(int tabIndex, TopoLink link)
{
if (tabIndex < 0 || link == null)
{
System.out.print("自定义鼠标事件类的setColorLinks参数为空!");
return;
}
if (this.colorLinks.containsKey(tabIndex))
{
this.colorLinks.get(tabIndex).add(link);
}
else
{
ArrayList<TopoLink> tempLink = new ArrayList<TopoLink>();
tempLink.add(link);
this.colorLinks.put(tabIndex, tempLink);
}
}
//以下是重写的父类相关方法
@Override
publicvoid showDialog(MouseEvent e, Component com)
{
//这里自定义双击网络元素显示的内容
}
@Override
publicvoid showMenu(MouseEvent e, Component com)
{
//这里自己定义右键网络元素需要显示的内容
}
@Override
publicvoid drawColorLines(int tabIndex)
{
ArrayList<TopoLink> links = this.colorLinks.get(tabIndex);
if (links != null)
{
int size = links.size();
JLayeredPane temp = getCurrentPane();
for (int i = 0; i < size; i++)
{
temp.add(links.get(i));
temp.repaint();
}
}
}
@Override
publicvoid clearColorLines(int tabIndex)
{
ArrayList<TopoLink> links = this.colorLinks.get(tabIndex);
if (links != null)
{
int size = links.size();
JLayeredPane temp = getCurrentPane();
for (int i = 0; i < size; i++)
{
temp.remove(links.get(i));
temp.repaint();
}
}
}
}
想要源码的朋友留下邮箱~
相关推荐
JTopo是由ZKWeb团队开发的一个开源的Java拓扑图库,它提供了丰富的功能来构建动态和交互式的拓扑图。以下是一些关键知识点: 1. **Java编程语言**:Java是一种广泛使用的面向对象的编程语言,具有跨平台性、健壮性...
在Java中,实现这样的拓扑图插件可以帮助开发者更好地理解和管理复杂项目。本篇文章将详细介绍如何利用Java来创建拓扑图插件,并探讨相关的核心知识点。 首先,拓扑图插件通常涉及图形用户界面(GUI)的设计,这...
JSP版网络拓扑图。开源免费插件。在线编辑,保存,js无压缩,封装少。稍加修改就可以用于自己的项目。详细请看博客https://www.cnblogs.com/visec479/p/4360052.html?utm_source=tuicool
Java 插件Grappa是基于Graphviz的一款强大的图形绘制工具,专为JAVA开发者设计,用于创建流程图、数据流图、网络拓扑图等多种图表,极大地提升了开发人员在设计和理解复杂系统结构时的效率。Graphviz是一款开源的...
【Java版BRITE】是一种基于Java编程语言实现的BRITE(Basic Routines for Internet Topology Engineering)工具。BRITE最初由MIT(麻省理工学院)研发,主要用于模拟和分析互联网的拓扑结构。Java版BRITE保留了原版...
Java开发工具插件GEF(Graphical Editing Framework)是用于构建图形化用户界面(GUI)的开源框架,特别适用于开发复杂的图形编辑器。它为Java开发人员提供了一套全面的API和工具,使得在Eclipse集成开发环境中创建...
Eclipse是一款广泛使用的开源集成开发环境(IDE),尤其在Java开发者中非常流行。"eclipse图形插件"指的是为Eclipse增添图形化设计能力的扩展,使得开发者可以通过拖放控件的方式来创建用户界面,实现“所见即所得”...
**OpenDayLight (ODL)** 是一个于2013年推出的开源项目,该项目汇聚了众多网络设备制造商、传统硬件设备巨头以及新兴IT软件厂商的力量。参与者包括但不限于思科、IBM、微软、BigSwitch和Vmware等。这一项目旨在通过...
Dynamips是一款强大的开源软件,能够模拟Cisco交换机和路由器,允许用户在个人电脑上构建复杂的网络拓扑。然而,Dynamips的命令行界面对于初学者来说不够友好,且在还原保护卡存在的实验室环境中,配置参数的修改...
在“Java-master”这个开源资源中,我们可以期待找到关于数据结构和算法的Java实现。Java是一种广泛使用的面向对象的编程语言,具有跨平台性、高效性和丰富的库支持,因此是学习数据结构和算法的理想选择。 数据...
拓扑插件的引入,极大地增强了OpenJUMP在处理空间数据时的精度和效率。这些插件通常包括一系列工具,允许用户检查和修复数据中的拓扑错误,例如确保点位于线的末端,线正确连接形成闭合的多边形,以及消除重叠或断开...
JGraphX是JGraph的扩展,提供了更多的功能和性能优化,适用于创建数据可视化、流程图、网络拓扑图、组织结构图等多种图形需求。 JGraphX的核心特性包括: 1. **图形API**:JGraphX提供了一套全面的API,允许开发者...
Eclipse 3.3 是一个历史悠久的开源集成开发环境(IDE),主要被用于Java应用程序的开发,但通过各种插件可以扩展到其他编程语言和领域。在这个特定的压缩包中,我们有两个图形界面开发插件,分别是EMF SDO Runtime ...
在IT行业中,Eclipse是一个广泛使用的开源集成开发环境(IDE),尤其在Java开发领域中备受青睐。为了增强Eclipse的功能,开发者可以利用其强大的插件系统进行扩展。GEF(Graphical Editing Framework)是Eclipse提供...
通过GEF,开发者可以设计和实现复杂的图表编辑器,例如流程图、网络拓扑图等。本章将详细介绍GEF的基本概念、架构以及如何创建和定制GEF编辑器。开发者将了解到模型-视图-控制器(MVC)的设计模式在GEF中的应用,...
标题"基于Java的实例源码-开放实时数据处理平台 Twitter Storm.zip"揭示了我们讨论的主题是Twitter Storm,一个用于实时数据处理的开源平台,其核心实现是用Java编程语言编写的。这个压缩包包含了Nathan Marz开发的...
mxgraph是一个强大的JavaScript图形库,主要用于绘制流程图、组织结构图、网络拓扑图等各种复杂图形。它为开发者提供了一整套工具,用于创建可交互、高度自定义的工作流应用程序。在工作流管理领域,mxgraph作为一个...
综上所述,"storm之Tuple元组分词操作Java代码"这个主题涵盖了Storm的核心概念,如tuples、Bolts、Spouts以及在Java环境中实现分词处理的细节,对于理解和实践Storm实时流处理具有重要意义。通过学习和理解这些代码...