日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
基于JavaApplet繪制拓?fù)鋱D總結(jié)

使用Java Applet技術(shù)開發(fā)小應(yīng)用程序,并最終將其部署到網(wǎng)頁上,使其能夠?qū)崿F(xiàn)從數(shù)據(jù)庫中讀取節(jié)點(diǎn)、鏈路數(shù)據(jù),并根據(jù)數(shù)據(jù)繪制拓?fù)鋱D的功能。繪制圖像的過程應(yīng)用jgraph開源軟件實(shí)現(xiàn)。
 
技術(shù)要點(diǎn):

成都創(chuàng)新互聯(lián)是少有的成都網(wǎng)站制作、做網(wǎng)站、營銷型企業(yè)網(wǎng)站、微信小程序開發(fā)、手機(jī)APP,開發(fā)、制作、設(shè)計(jì)、賣鏈接、推廣優(yōu)化一站式服務(wù)網(wǎng)絡(luò)公司,2013年開創(chuàng)至今,堅(jiān)持透明化,價(jià)格低,無套路經(jīng)營理念。讓網(wǎng)頁驚喜每一位訪客多年來深受用戶好評(píng)

1、在頁面上部署Java Applet應(yīng)用程序,并調(diào)用jgraph.jar包

 
 
 
  1. codebase="./" width="660" height="560"> applet> 

在此將網(wǎng)頁文件和AppletDemo.jar放在同一個(gè)目錄下,由于需要引用第三方的jgraph.jar包,因此在archive屬性中一并寫上jgraph.jar

2、Java Applet應(yīng)用程序訪問數(shù)據(jù)庫

由于Java Applet應(yīng)用程序本身的策略限制,在默認(rèn)情況下應(yīng)用程序只能以http協(xié)議訪問運(yùn)行此Java Applet應(yīng)用程序的主機(jī);而修改策略,需要加入數(shù)字簽名,并且瀏覽器會(huì)提示安全問題。因此在本次開發(fā)中,使用Java Applet訪問Servlet的流行方法來解決讀取數(shù)據(jù)庫的問題。

Java Applet應(yīng)用程序和Servlet進(jìn)行交互,可以直接在兩者間傳遞支持序列化的對(duì)象(Serializable)。在Servlet端,只需要響應(yīng)doGet事件,并將處理結(jié)果以O(shè)bjectStream的形式返回即可:

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

在Java Applet端,發(fā)起數(shù)據(jù)請(qǐng)求和接受結(jié)果如下:

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

和數(shù)據(jù)庫交互的部分,被封裝到另外的類CellHandler中。)

3、利用jgraph繪制拓?fù)鋱D的過程

在jgraph中,存在頂點(diǎn)(vertice)、連線(edge)、端口(port)的概念,他們的關(guān)系如下:

頂點(diǎn)、連線、端口都被認(rèn)為是GraphCell,只不過連線和端口有自己獨(dú)特的屬性。

利用jgraph繪圖的流程如下:

創(chuàng)建頂點(diǎn)集合,并指定各個(gè)頂點(diǎn)的屬性

 
 
 
  1. DefaultGraphCell c = new DefaultGraphCell(rs.getString("MAIN_IP"));
  2. //創(chuàng)建頂點(diǎn)對(duì)象,并指定Label顯示文字
  3. GraphConstants.setAutoSize(c.getAttributes(), true);
  4. //設(shè)定頂點(diǎn)大小為自動(dòng)縮放
  5. DefaultPort p = new DefaultPort();
  6.              c.add(p);
  7. //為頂點(diǎn)添加一個(gè)端口,用以連接連線

如果需要為頂點(diǎn)加入用戶自定義的屬性,可以利用jgraph提供的AttributeMap創(chuàng)建屬性鍵值對(duì),***附加到頂點(diǎn)上:

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

接著創(chuàng)建連線,并根據(jù)規(guī)則指定連線的起點(diǎn)和終點(diǎn):

 
 
 
  1. DefaultEdge e = new DefaultEdge();
  2. AttributeMap m = new AttributeMap();
  3. m.applyValue("OBJECT_INSTANCE",rs.getString("OBJECT_INSTANCE"));
  4. m.applyValue("SOURCE1_INSTANCE",rs.getString("SOURCE1_INSTANCE"));
  5. m.applyValue("SOURCE2_INSTANCE",rs.getString("SOURCE2_INSTANCE"));
  6. m.applyValue("TYPE","LINK");
  7. e.getAttributes().applyMap(m); 

在指定連接的起點(diǎn)和終點(diǎn)時(shí),采用比對(duì)SOURCE1_INSTANCE和SOURCE2_INSTANCE是否和頂點(diǎn)中的OBJECT_INSTANCE匹配的方法,若匹配,則被比較頂點(diǎn)是當(dāng)前連線的起點(diǎn)或終點(diǎn):

 
 
 
  1. for (int i = 0; i < alLink.length; i++) {
  2.      for (int j = 0; j < alCell.length; j++) {
  3.           if (alCell[j].getAttributes().get("OBJECT_INSTANCE")
  4.                  .toString().equalsIgnoreCase(
  5.                   alLink[i].getAttributes().get(
  6.                    "SOURCE1_INSTANCE").toString())) {
  7.               alLink[i].setSource(alCell[j].getChildAt(0));
  8.                                  }
  9.           if (alCell[j].getAttributes().get("OBJECT_INSTANCE")
  10.                   .toString().equalsIgnoreCase(
  11.                  alLink[i].getAttributes().get(
  12.               "SOURCE2_INSTANCE").toString())) {
  13.       alLink[i].setTarget(alCell[j].getChildAt(0));
  14.                                  }
  15.                           }
  16.                    } 

設(shè)置起點(diǎn)或終點(diǎn)需要調(diào)用setSource()或setTarget()方法,需要注意的是此方法的參數(shù)是頂點(diǎn)的端口,而非頂點(diǎn)本身,因此參數(shù)形式是GraphCell.getChildAt(0)。由于本次開發(fā)中只為頂點(diǎn)創(chuàng)建了一個(gè)端口,因此只有g(shù)etChildAt(0)有效。

4、為頂點(diǎn)指定圖標(biāo)

要為頂點(diǎn)指定圖標(biāo),首先要在Java Applet應(yīng)用程序中成功加載圖標(biāo)文件。Java Applet僅支持gif/png/jpg格式的圖片文件,其他格式的一概設(shè)置ImageIcon對(duì)象Image Load Status=4的錯(cuò)誤,表示Load出錯(cuò),但是不會(huì)提示具體錯(cuò)誤。

在Java Applet中調(diào)用其他文件,應(yīng)該將此文件一并封裝在Java Applet應(yīng)用程序包中,并且遵循Java規(guī)范創(chuàng)建標(biāo)準(zhǔn)包的名稱。在此次開發(fā)中,Java Applet應(yīng)用程序本身的包名為org.nlsde.draw.applet,所需要調(diào)用的圖片文件的包名為org.nlsde.draw.applet.ico。在調(diào)用圖片文件時(shí),只需要使用getCodeBase()方法即可獲得Java Applet應(yīng)用程序本身的路徑,再加上ico即可找到圖片文件:

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

獲取圖片的ImageIcon對(duì)象后,使用jgraph內(nèi)置的方法可以很容易的為頂點(diǎn)設(shè)置圖標(biāo)。
 
5、定義數(shù)據(jù)庫連接

本次開發(fā)中數(shù)據(jù)庫連接被封裝在DBHandler類中。另外使用SystemConfig.xml文件來存儲(chǔ)連接數(shù)據(jù)庫的信息。在DBHandler類訪問SystemConfig.xml文件時(shí),為SystemConfig.xml文件指定了URL路徑而非本地路徑:

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

這是因?yàn)镴ava Web App在運(yùn)行時(shí),默認(rèn)起始路徑是$TOMCAT_HOME/bin,而非Web App本身的根目錄,調(diào)用比較麻煩。

在SystemConfig.xml文件中,存儲(chǔ)的數(shù)據(jù)庫連接信息包括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))))

這是因?yàn)樵贠racle端配置了負(fù)載平衡,而網(wǎng)站所在服務(wù)器不安裝Oracle 10g的客戶端,無法使用服務(wù)名解析數(shù)據(jù)庫連接字符串,因此直接將服務(wù)名為nmstest的連接字符串寫在這里。


本文題目:基于JavaApplet繪制拓?fù)鋱D總結(jié)
鏈接URL:http://www.5511xx.com/article/ccsgdeo.html