`
hanyexiaoxiao
  • 浏览: 42233 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

基于Java Applet绘制拓扑图总结

    博客分类:
  • java
阅读更多

文章背景:
使用Java Applet技术开发小应用程序,并最终将其部署到网页上,使其能够实现从数据库中读取节点、链路数据,并根据数据绘制拓扑图的功能。绘制图像的过程应用jgraph开源软件实现。
 
技术要点:
1、在页面上部署Java Applet应用程序,并调用jgraph.jar包
<applet archive="AppletDemo.jar,jgraph.jar" code="org/nlsde/draw/applet/AppletDemo.class" codebase="./" width="660" height="560"></applet>


在此将网页文件和AppletDemo.jar放在同一个目录下,由于需要引用第三方的jgraph.jar包,因此在archive属性中一并写上jgraph.jar

 
2、Java Applet应用程序访问数据库
由于Java Applet应用程序本身的策略限制,在默认情况下应用程序只能以http协议访问运行此Java Applet应用程序的主机;而修改策略,需要加入数字签名,并且浏览器会提示安全问题。因此在本次开发中,使用Java Applet访问Servlet的流行方法来解决读取数据库的问题。

Java Applet应用程序和Servlet进行交互,可以直接在两者间传递支持序列化的对象(Serializable)。在Servlet端,只需要响应doGet事件,并将处理结果以ObjectStream的形式返回即可:

              DefaultGraphCell[] alCells = org.nlsde.draw.data.CellHandler.getAllCells();
 
              ObjectOutputStream out = new ObjectOutputStream(response
                            .getOutputStream());
              out.writeObject(alCells);

在Java Applet端,发起数据请求和接受结果如下:

                     URL url = new URL(getCodeBase() + "/servlet/GetAllCells");
                     URLConnection urlConn = url.openConnection();
                     InputStream in = urlConn.getInputStream();
                     ObjectInputStream result = new ObjectInputStream(in);
                     Object obj = result.readObject();
 
                     DefaultGraphCell[] alCell = (DefaultGraphCell[]) obj;


(和数据库交互的部分,被封装到另外的类CellHandler中。)

 

3、利用jgraph绘制拓扑图的过程
在jgraph中,存在顶点(vertice)、连线(edge)、端口(port)的概念,他们的关系如下:

 

顶点、连线、端口都被认为是GraphCell,只不过连线和端口有自己独特的属性。

利用jgraph绘图的流程如下:

创建顶点集合,并指定各个顶点的属性
                            DefaultGraphCell c = new DefaultGraphCell(rs
                                          .getString("MAIN_IP"));
//创建顶点对象,并指定Label显示文字
                            GraphConstants.setAutoSize(c.getAttributes(), true);
//设定顶点大小为自动缩放
                            DefaultPort p = new DefaultPort();
                            c.add(p);
//为顶点添加一个端口,用以连接连线
                            GraphConstants.setBounds(c.getAttributes(),
                                          new Rectangle2D.Double(Integer.parseInt(c
                                                        .getAttributes().get("OBJECT_X").toString()),
                                                        Integer.parseInt(c.getAttributes().get(
                                                                      "OBJECT_Y").toString()), 80, 80));
//指定顶点的位置坐标和大小


如果需要为顶点加入用户自定义的属性,可以利用jgraph提供的AttributeMap创建属性键值对,最后附加到顶点上:

                            AttributeMap m = new AttributeMap();
                            m.applyValue("MAIN IP", rs.getString("MAIN_IP"));
                            c.getAttributes().applyMap(m);


接着创建连线,并根据规则指定连线的起点和终点:

                            DefaultEdge e = new DefaultEdge();
                            AttributeMap m = new AttributeMap();
                            m.applyValue("OBJECT_INSTANCE",rs.getString("OBJECT_INSTANCE"));
                            m.applyValue("SOURCE1_INSTANCE",rs.getString("SOURCE1_INSTANCE"));
                            m.applyValue("SOURCE2_INSTANCE",rs.getString("SOURCE2_INSTANCE"));
                            m.applyValue("TYPE","LINK");
                           
                            e.getAttributes().applyMap(m);


在指定连接的起点和终点时,采用比对SOURCE1_INSTANCE和SOURCE2_INSTANCE是否和顶点中的OBJECT_INSTANCE匹配的方法,若匹配,则被比较顶点是当前连线的起点或终点:

                     for (int i = 0; i < alLink.length; i++) {
                            for (int j = 0; j < alCell.length; j++) {
                                   if (alCell[j].getAttributes().get("OBJECT_INSTANCE")
                                                 .toString().equalsIgnoreCase(
                                                               alLink[i].getAttributes().get(
                                                                             "SOURCE1_INSTANCE").toString())) {
                                          alLink[i].setSource(alCell[j].getChildAt(0));
                                   }
                                   if (alCell[j].getAttributes().get("OBJECT_INSTANCE")
                                                 .toString().equalsIgnoreCase(
                                                               alLink[i].getAttributes().get(
                                                                             "SOURCE2_INSTANCE").toString())) {
                                          alLink[i].setTarget(alCell[j].getChildAt(0));
                                   }
                            }
                     }

设置起点或终点需要调用setSource()或setTarget()方法,需要注意的是此方法的参数是顶点的端口,而非顶点本身,因此参数形式是GraphCell.getChildAt(0)。由于本次开发中只为顶点创建了一个端口,因此只有getChildAt(0)有效。

 
4、为顶点指定图标
要为顶点指定图标,首先要在Java Applet应用程序中成功加载图标文件。Java Applet仅支持gif/png/jpg格式的图片文件,其他格式的一概设置ImageIcon对象Image Load Status=4的错误,表示Load出错,但是不会提示具体错误。

在Java Applet中调用其他文件,应该将此文件一并封装在Java Applet应用程序包中,并且遵循Java规范创建标准包的名称。在此次开发中,Java Applet应用程序本身的包名为org.nlsde.draw.applet,所需要调用的图片文件的包名为org.nlsde.draw.applet.ico。在调用图片文件时,只需要使用getCodeBase()方法即可获得Java Applet应用程序本身的路径,再加上ico即可找到图片文件:

                            URL u = AppletDemo.class.getResource("ico/"
                                          + alCell[i].getAttributes().get("OBJECT_ICON")
                                                        .toString() + ".jpg");
                            ImageIcon icon = new ImageIcon(u);
 
                            GraphConstants.setIcon(alCell[i].getAttributes(), icon);


获取图片的ImageIcon对象后,使用jgraph内置的方法可以很容易的为顶点设置图标。

 
5、定义数据库连接
本次开发中数据库连接被封装在DBHandler类中。另外使用SystemConfig.xml文件来存储连接数据库的信息。在DBHandler类访问SystemConfig.xml文件时,为SystemConfig.xml文件指定了URL路径而非本地路径:

       private static final String _configFile = "http://192.168.15.230:8080/draw/SystemConfig.xml";

这是因为Java Web App在运行时,默认起始路径是$TOMCAT_HOME/bin,而非Web App本身的根目录,调用比较麻烦。

在SystemConfig.xml文件中,存储的数据库连接信息包括Java – Oracle连接字符串:

jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.101.32)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.101.34)(PORT=1521))(LOAD_BALANCE=yes)(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=nmstest)(FAILOVER_MODE=(TYPE=SELECT)(METHOD=BASIC)(RETRIES=180)(DELAY=5))))


这是因为在Oracle端配置了负载平衡,而网站所在服务器不安装Oracle 10g的客户端,无法使用服务名解析数据库连接字符串,因此直接将服务名为nmstest的连接字符串写在这里。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/vmape/archive/2007/06/30/1672898.aspx

分享到:
评论
2 楼 jiang_xiaohan 2012-09-26  
学习中,纠结中,求大神帮助
1 楼 www88485400 2010-08-01  
看了还是一头雾水 有没有例子可以下载看看啊

相关推荐

    基于java+applet图片浏览小程序

    基于java+applet图片浏览小程序 基于java+applet图片浏览小程序 基于java+applet图片浏览小程序 基于java+applet图片浏览小程序 基于java+applet图片浏览小程序 基于java+applet图片浏览小程序 基于java+applet图片...

    基于java applet的简易画图程序

    通过这个基于Java Applet的简易画图程序,我们可以学习到Java事件处理机制,理解如何响应用户的鼠标操作,并在画布上实时绘制图形。虽然现代Web开发中Java Applet的使用已经不多,但这个示例仍然是学习Java图形界面...

    利用JAVA applet绘制的时钟

    本示例中的"利用JAVA applet绘制的时钟"是一个基于Java Applet实现的模拟时钟,它能够实时显示当前时间,就像实际的物理时钟一样。 1. **Java Applet基础知识**: - Java Applet是一种特殊的Java程序,它嵌入到...

    基于Java Applet的WebGIS的瓶颈问题研究.pdf

    基于Java Applet的WebGIS的瓶颈问题研究 WebGIS(Web-based Geographic Information System)是当今GIS发展的主要方向之一,旨在将Internet技术应用于GIS开发,实现空间数据的发布、查询和分析等功能。基于Java ...

    基于Web的JGraphx自动绘制拓扑图的设计和实现.pdf

    总结来说,本文介绍了基于Web的JGraphx自动绘制拓扑图的设计和实现,包括JGraphx的功能和特性、Applet技术的应用、WebService的使用等,通过这些技术的结合,实现了企业信息系统对网络拓扑图的绘制、告警、监控需求...

    基于java+applet实现家庭理财系统(java+applet+系统ppt文档)

    基于java+applet实现家庭理财系统(java+applet+系统ppt文档) 基于java+applet实现家庭理财系统(java+applet+系统ppt文档) 基于java+applet实现家庭理财系统(java+applet+系统ppt文档) 基于java+applet实现家庭理财...

    简单的java applet图像移动重画实例

    Java Applet是Java技术在早期Web开发中的一种应用方式,它允许开发者创建可以在浏览器中运行的小型应用程序。在这个“简单的java applet图像移动重画实例”中,我们将深入探讨Java Applet的基础知识,以及如何实现...

    java基础applet绘制图形代码

    在给定的代码示例“java基础applet绘制图形代码”中,我们看到了如何使用Java Applet来绘制各种基本图形。下面,我们将详细解析这段代码中的关键知识点。 ### 1. 导入必要的包 首先,我们注意到代码中导入了`java....

    基于java的阳光酒店管理系统(javaapplet+SQL).zip

    基于java的阳光酒店管理系统(javaapplet+SQL)基于java的阳光酒店管理系统(javaapplet+SQL)基于java的阳光酒店管理系统(javaapplet+SQL)基于java的阳光酒店管理系统(javaapplet+SQL)基于java的阳光酒店管理系统(java...

    一种基于Java的网络拓扑水波动画显示方法设计及实现.pdf

    "一种基于Java的网络拓扑水波动画显示方法设计及实现" 本资源摘要信息中,主要介绍了一种基于Java的网络拓扑水波动画显示方法的设计和实现。该方法旨在解决当前网络拓扑图形显示的缺陷问题,例如实时性问题、拓扑...

    java applet小游戏拼图

    Java Applet小游戏拼图是一个基于Java编程语言的互动娱乐应用,它被设计成可以在Web浏览器中运行的小程序。Applet是Java技术的一部分,允许开发者创建动态、交互式的网络内容。这个小游戏是为Java爱好者提供的一个...

    基于java+applet实现阳光酒店管理系统(java+applet+SQL+文档lunwen+PPT)

    基于java+applet实现阳光酒店管理系统(java+applet+SQL+文档lunwen+PPT) 基于java+applet实现阳光酒店管理系统(java+applet+SQL+文档lunwen+PPT) 基于java+applet实现阳光酒店管理系统(java+applet+SQL+文档lunwen+...

    基于Java图片浏览小程序(java+applet).zip

    基于Java图片浏览小程序(java+applet).zip 基于Java图片浏览小程序(java+applet).zip 基于Java图片浏览小程序(java+applet).zip 基于Java图片浏览小程序(java+applet).zip 基于Java图片浏览小程序(java+applet).zip ...

    计算机毕业设计基于java+applet的家庭理财系统的实现(java+applet).zip

    计算机毕业设计基于java+applet的家庭理财系统的实现(java+applet).zip计算机毕业设计基于java+applet的家庭理财系统的实现(java+applet).zip计算机毕业设计基于java+applet的家庭理财系统的实现(java+applet).zip...

    基于Java Applet的LXI仪器网页面板实现.pdf

    "基于Java Applet的LXI仪器网页面板实现" 基于Java Applet的LXI仪器网页面板实现是指利用Java Applet技术设计的仪器网页面板,以便实现对仪器的灵活控制和大批量波形数据的实时回读与显示。该技术借助于标准网络...

    基于Java Applet的液位PID控制仿真.pdf

    1. 基于 Java Applet 的液位 PID 控制仿真:系统使用 Java 语言实现 PID 算法,编制界面动画,并使用 JFreeChart 插件绘制实时曲线。 2. 在线仿真:系统可以在线仿真液位 PID 控制,方便高校实验和远程教学。 3. ...

    JavaApplet_javaapplet小程序_java_

    JavaApplet是Java技术在早期Web开发中的一种重要应用,它允许开发者创建可以在网页中运行的小型程序。这些小程序能够增强交互性,提供动态内容,比如游戏、图表、动画等。JavaApplet运行在用户的浏览器上,由Java ...

    基于Java Applet的网络地图服务平台设计与实现.pdf

    基于Java Applet的网络地图服务平台设计与实现.pdf 该文档主要讨论了基于Java Applet的网络地图服务平台的设计与实现。该平台采用B/S模式,以Java语言为基础平台开发设计,实现了网络地图发布平台。该平台的逻辑...

    java applet 简单案例

    Java Applet是Java技术在早期Web开发中的一种应用方式,它允许开发者在浏览器中嵌入可执行的小程序,为用户提供动态交互的Web页面体验。这个简单的案例将带你深入理解Java Applet的基础概念、工作原理以及如何创建和...

    最简单的java applet图像移动重画实例

    Java Applet是Java平台早期的一种技术,用于在Web浏览器中执行小程序,比如显示交互式的图形、游戏等。在这个"最简单的java applet图像移动重画实例"中,我们将深入探讨如何利用Java Applet来实现一个动态移动的图像...

Global site tag (gtag.js) - Google Analytics