`
LilyEnjoyingLife
  • 浏览: 70585 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

java 实现的画网络拓扑插件 开源

阅读更多


重开博客,附上源码链接  ,再看那时候的代码写的不太好注释不全面,大家先参考着,后续有时间再重写。求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时才会被执行到,先执行clearColorLineslastTabIndex;(即先清除上一个面板上内容),再

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();

            }

        }

    }

}

 

 

 

 

 想要源码的朋友留下邮箱~

  • 大小: 24.6 KB
  • 大小: 26 KB
  • 大小: 224.3 KB
  • 大小: 113 KB
  • 大小: 18.6 KB
5
2
分享到:
评论
63 楼 twgiggs 2018-03-24  
楼主,求源码啊!近期将拓扑发现的功能实现了,但是不知道怎么绘制拓扑,请求发一份源码,感激不尽! 9856043@qq.com
62 楼 cs200816 2017-09-06  
楼主,求源码啊!276885742@qq.com。最近项目有画拓扑图的需求,还要自动拓扑发现,一点头绪都没有!感激不尽
61 楼 岸眷扁舟 2017-03-20  
楼主,womengweiyi@163.com,真心感谢了!
60 楼 xiaoxiaoasd 2017-03-13  
楼主,正在做拓扑,没什么思路,求源码,跪谢。1371943267@qq.com
59 楼 xyseer 2016-11-22  
楼主,发份源码,非常感谢
30501377@qq.com
58 楼 huominxin 2016-11-11  
楼主,求一份源码,感恩戴德,感谢楼主!
421294251@qq.com
57 楼 qq1031487361 2016-02-18  
楼主在吗~~最近也在做项目,需要这个,求源码一份~~~邮箱:1031487361@qq.com
非常感谢,祝您生活愉快
56 楼 asd3802 2015-10-19  
博主在吗,最近在做相关需求,麻烦发一份源码我研究下,谢谢啦
邮箱地址:gree__n@163.com
55 楼 no87木 2015-07-17  
博主给我一份源码吧,最近正在学习这个。zhenzhongfuture@163.com
54 楼 sunlha 2015-06-18  
你好,最近需要用java画拓扑图,能发一下源码吗?邮箱号:52126jiao@163.com  非常感谢?
53 楼 xiyunlian 2015-05-21  
您好,最近需要用这方面的东西,可以发一下源码吗 非常感谢!

邮箱:xiyunlian@126.com

祝一切顺利!
52 楼 wellxiao2014 2015-05-18  
897808432@qq.com
谢谢,好人一生平安
51 楼 chenyangnjit 2015-05-13  
chenyangnjit@163.com  希望得到源码
50 楼 kaiste 2015-04-24  
kaiste@126.com   好人一生平安~!
49 楼 Little_Stone 2015-01-06  
感谢楼主分享,求源码,sxmmeng@163.com 谢谢!
48 楼 summer820228 2014-12-14  
楼主辛苦了,能发份源码给我吗!xuweixing@163.com
47 楼 cphanitom 2014-11-07  
感谢楼主!!!
我有两处需要继续研究学习:
1.线是端口间的,我想在拓扑中展示相应的端口信息;
2.关于拓扑的保存;
能否发送源码,183236707@qq.com谢谢!!!
46 楼 zheiiaa 2014-10-28  
最近想把看过的书之间的联系用拓扑图做出来,希望能得到源码248163542@qq.com,谢谢
45 楼 tosz 2014-10-17  
1159399403@qq.com,发我一份吧,万分感谢
44 楼 movie_fan2008 2014-10-16  
很不错,求源码,谢谢! 5822329@qq.com

相关推荐

    java实现拓扑图插件 - 2(已亲测)

    JTopo是由ZKWeb团队开发的一个开源的Java拓扑图库,它提供了丰富的功能来构建动态和交互式的拓扑图。以下是一些关键知识点: 1. **Java编程语言**:Java是一种广泛使用的面向对象的编程语言,具有跨平台性、健壮性...

    java实现拓扑图插件 - 1(已亲测)

    在Java中,实现这样的拓扑图插件可以帮助开发者更好地理解和管理复杂项目。本篇文章将详细介绍如何利用Java来创建拓扑图插件,并探讨相关的核心知识点。 首先,拓扑图插件通常涉及图形用户界面(GUI)的设计,这...

    JSP版网络拓扑图

    JSP版网络拓扑图。开源免费插件。在线编辑,保存,js无压缩,封装少。稍加修改就可以用于自己的项目。详细请看博客https://www.cnblogs.com/visec479/p/4360052.html?utm_source=tuicool

    Java 版BRITE

    【Java版BRITE】是一种基于Java编程语言实现的BRITE(Basic Routines for Internet Topology Engineering)工具。BRITE最初由MIT(麻省理工学院)研发,主要用于模拟和分析互联网的拓扑结构。Java版BRITE保留了原版...

    java插件grappa

    Java 插件Grappa是基于Graphviz的一款强大的图形绘制工具,专为JAVA开发者设计,用于创建流程图、数据流图、网络拓扑图等多种图表,极大地提升了开发人员在设计和理解复杂系统结构时的效率。Graphviz是一款开源的...

    java开发工具插件 GEF

    Java开发工具插件GEF(Graphical Editing Framework)是用于构建图形化用户界面(GUI)的开源框架,特别适用于开发复杂的图形编辑器。它为Java开发人员提供了一套全面的API和工具,使得在Eclipse集成开发环境中创建...

    eclipse图形插件

    Eclipse是一款广泛使用的开源集成开发环境(IDE),尤其在Java开发者中非常流行。"eclipse图形插件"指的是为Eclipse增添图形化设计能力的扩展,使得开发者可以通过拖放控件的方式来创建用户界面,实现“所见即所得”...

    先电云计算网络搭建操作手册-Cloud-SDN-v2.0.pdf

    **OpenDayLight (ODL)** 是一个于2013年推出的开源项目,该项目汇聚了众多网络设备制造商、传统硬件设备巨头以及新兴IT软件厂商的力量。参与者包括但不限于思科、IBM、微软、BigSwitch和Vmware等。这一项目旨在通过...

    在线虚拟网络实验平台的设计与实现.pdf

    Dynamips是一款强大的开源软件,能够模拟Cisco交换机和路由器,允许用户在个人电脑上构建复杂的网络拓扑。然而,Dynamips的命令行界面对于初学者来说不够友好,且在还原保护卡存在的实验室环境中,配置参数的修改...

    用于学习数据结构和算法及其在任何编程语言中的实现的开源资源

    在“Java-master”这个开源资源中,我们可以期待找到关于数据结构和算法的Java实现。Java是一种广泛使用的面向对象的编程语言,具有跨平台性、高效性和丰富的库支持,因此是学习数据结构和算法的理想选择。 数据...

    topology-extension:OpenJUMP扩展,用于处理矢量层拓扑的插件

    拓扑插件的引入,极大地增强了OpenJUMP在处理空间数据时的精度和效率。这些插件通常包括一系列工具,允许用户检查和修复数据中的拓扑错误,例如确保点位于线的末端,线正确连接形成闭合的多边形,以及消除重叠或断开...

    java绘图软件库

    JGraphX是JGraph的扩展,提供了更多的功能和性能优化,适用于创建数据可视化、流程图、网络拓扑图、组织结构图等多种图形需求。 JGraphX的核心特性包括: 1. **图形API**:JGraphX提供了一套全面的API,允许开发者...

    eclipse3.3 图形界面开发插件(两个)

    Eclipse 3.3 是一个历史悠久的开源集成开发环境(IDE),主要被用于Java应用程序的开发,但通过各种插件可以扩展到其他编程语言和领域。在这个特定的压缩包中,我们有两个图形界面开发插件,分别是EMF SDO Runtime ...

    Eclipse插件开发--gef开发指南与入门系列宝典

    在IT行业中,Eclipse是一个广泛使用的开源集成开发环境(IDE),尤其在Java开发领域中备受青睐。为了增强Eclipse的功能,开发者可以利用其强大的插件系统进行扩展。GEF(Graphical Editing Framework)是Eclipse提供...

    Eclipse插件开发学习笔记(ch22-24)

    通过GEF,开发者可以设计和实现复杂的图表编辑器,例如流程图、网络拓扑图等。本章将详细介绍GEF的基本概念、架构以及如何创建和定制GEF编辑器。开发者将了解到模型-视图-控制器(MVC)的设计模式在GEF中的应用,...

    基于Java的实例源码-开放实时数据处理平台 Twitter Storm.zip

    标题"基于Java的实例源码-开放实时数据处理平台 Twitter Storm.zip"揭示了我们讨论的主题是Twitter Storm,一个用于实时数据处理的开源平台,其核心实现是用Java编程语言编写的。这个压缩包包含了Nathan Marz开发的...

    mxgraph工作流插件

    mxgraph是一个强大的JavaScript图形库,主要用于绘制流程图、组织结构图、网络拓扑图等各种复杂图形。它为开发者提供了一整套工具,用于创建可交互、高度自定义的工作流应用程序。在工作流管理领域,mxgraph作为一个...

    storm之Tuple元组分词操作Java代码.zip

    综上所述,"storm之Tuple元组分词操作Java代码"这个主题涵盖了Storm的核心概念,如tuples、Bolts、Spouts以及在Java环境中实现分词处理的细节,对于理解和实践Storm实时流处理具有重要意义。通过学习和理解这些代码...

Global site tag (gtag.js) - Google Analytics