Õ¾ÄÚËÑË÷: ÇëÊäÈëËÑË÷¹Ø¼ü´Ê

µ±Ç°Ò³Ãæ: ¿ª·¢×ÊÁÏÊ×Ò³ ¡ú Eclipse רÌâ ¡ú ÔÚJavaÖÐʹÓÃDraw2DºÍSWT»æͼ

ÔÚJavaÖÐʹÓÃDraw2DºÍSWT»æͼ

ÕªÒª: Óà Java»æͼһֱ¶¼ÎüÒý×Å¿ª·¢ÈËÔ±µÄ×¢Òâ¡£´«Í³ÉÏ£¬Java ¿ª·¢ÈËԱʹÓà java.awt.Graphics »ò Java 2D API ½øÐлæͼ
<table cellSpacing=0 cellPadding=0 width="90%" align=center bgColor=#f1fdfe border=1> <tr> <td width="24%"> ÌØɫרÇø</td> <td colSpan=2> ÍƼöÎÄÕÂ</td></tr> <tr> <td width="24%"> ÍøÂç±à³ÌרÇø</td> <td width="39%"> Windows SocketsÍøÂç±à³ÌʵÓñ¦µä</td> <td width="37%"> »ùÓÚDelphiµÄSocket I/OÄ£ÐÍÈ«½Ó´¥</td></tr> <tr> <td width="24%"> VBÊý¾Ý¿â±à³ÌרÇø</td> <td width="39%"> Visual BasicͨÓñ¨±íÉè¼ÆС½á</td> <td width="37%"> VBʵÏÖSQL Server 2000´æ´¢¹ý³Ìµ÷ÓÃ</td></tr> <tr> <td width="24%"> Windows API¿ª·¢×¨Çø</td> <td width="39%"> ʲôÊÇWindows API</td> <td width="37%"> ÀûÓÃAPIº¯ÊýʵÏÖÒþ²ØºÍÏÔʾ×ÀÃæͼ±ê</td></tr></table>

¡¡¡¡Óà Java»æͼһֱ¶¼ÎüÒý×Å¿ª·¢ÈËÔ±µÄ×¢Òâ¡£´«Í³ÉÏ£¬Java ¿ª·¢ÈËԱʹÓà java.awt.Graphics »ò Java 2D API ½øÐлæͼ¡£Ò»Ð©¿ª·¢ÈËÔ±ÉõÖÁʹÓÃÏֳɵĿªÔ´¹¤¾ßÏ䣨Èç JSci£©À´»æͼ¡£µ«ºÜ¶àʱºò£¬ÄúµÄÑ¡Ôñ±»ÏÞ¶¨ÔÚÁË AWT »ò Swing ÉÏ¡£ÎªÁË×î´óÏ޶ȵؼõÉÙ¶ÔµÚÈý·½¹¤¾ßÏäµÄÒÀÀµ£¬»òÕßΪÁ˼ò»¯»æͼ»ù´¡£¬¿ÉÒÔ¿¼ÂÇʹÓà Draw2D£¬²¢±àд×Ô¼ºµÄ´úÂëÀ´ÖÆͼ»ò»æͼ¡£

¡¡¡¡Draw2D ¼ò½é

¡¡¡¡Draw2D ÊÇÒ»¸öפÁôÔÚ SWT Composite Ö®ÉϵÄÇáÁ¿¼¶´°¿ÚС²¿¼þϵͳ¡£Ò»¸ö Draw2D ʵÀý ÓÉÒ»¸ö SWT Composite¡¢Ò»¸öÇáÁ¿¼¶ÏµÍ³¼°ÆäÄÚÈݵÄͼÐÎ×é³É¡£Í¼ÐÎ ÊÇ Draw2D µÄ¹¹½¨¿é¡£¹ØÓÚ Draw2D API µÄËùÓÐϸ½Ú£¬¿ÉÒÔ´Ó Draw2D Developer¡¯s Guide µÄ Eclipse °ïÖúÎļþÖÐÕÒµ½¡£ÒòΪ±¾ÎIJ»´òËã³ÉΪһƪ½²Êö Draw2D µÄ½Ì³Ì£¬ËùÒÔ£¬ÎªÁ˼ò±ãÆð¼û£¬Ö»ÒªÄúÁ˽â Draw2D API ¿ÉÒÔ°ïÖúÄúÔÚ SWT Canvas ÉϽøÐлæͼ¾Í×ã¹»ÁË¡£Äú¿ÉÒÔÖ±½ÓʹÓÃһЩ±ê×¼µÄͼÐΣ¬±ÈÈç Ellipse¡¢Polyline¡¢RectangleFigure ºÍ Triangle£¬»òÕߣ¬Äú¿ÉÒÔÀ©Õ¹ËüÃÇÀ´´´½¨×Ô¼ºµÄͼÐΡ£´ËÍ⣬һЩÈÝÆ÷ͼÐΣ¬Èç Panel£¬¿ÉÒԳ䵱ËùÓÐ×ÓͼÐεÄ×ÜÈÝÆ÷¡£

¡¡¡¡Draw2D ÓÐÁ½¸öÖØÒªµÄ°ü£ºorg.eclipse.draw2d.geometry ºÍ org.eclipse.draw2d.graph£¬±¾ÎÄÖÐʹÓÃÁËÕâÁ½¸ö°ü¡£org.eclipse.draw2d.geometry °üÓÐһЩÓÐÓõÄÀ࣬±ÈÈç Rectangle¡¢Point ºÍ PointList£¬ÕâЩÀ඼ÊÇ×ÔÎÒ½âÊ͵ġ£ÁíÒ»¸ö°ü org.eclipse.draw2d.graph ¿ª·¢ÈËԱʹÓõĿÉÄܲ»ÊÇÌ«¶à¡£Õâ¸ö°üÌṩÁËһЩÖØÒªµÄÀ࣬±ÈÈç DirectedGraph¡¢Node¡¢Edge¡¢NodeList ºÍ EdgeList£¬ÕâЩÀàÓÐÖúÓÚ´´½¨Í¼±í¡£

¡¡¡¡ÔÚ±¾ÎÄÖУ¬ÎÒ½«½âÊÍÈçºÎʹÓà Draw2D ±àд´úÂ룬°ïÖúÄúÒÔͼÐεķ½Ê½ÐÎÏó»¯ÄúµÄÊý¾Ý¡£ÎÒ½«´ÓÒ»Ïî¼¼ÊõµÄÃèÊö¿ªÊ¼£¬¸Ã¼¼Êõ½«Î»ÓÚijһ·¶Î§ÄÚµÄÊý¾ÝÖµ£¨±ÈÈ磬´Ó 0 µ½ 2048£©°´±ÈÀýËõ·Å³ÉÁíÒ»·¶Î§ÄڵĵÈЧÊý¾ÝÖµ£¨ÀýÈ磬´Ó 0 µ½ 100£©¡£È»ºó£¬ÎÒ½«¾ÙÀý˵Ã÷ÈçºÎ»æÖƳöÈÎÒâ¸ö¼¶ÊýµÄ X-Y ×ø±êͼ£¬Ã¿¸ö¼¶Êý¶¼°üº¬Ò»×éÊý¾ÝÔªËØ¡£ÔÚѧϰÁ˱¾ÎÄÖеĸÅÄîÖ®ºó£¬¾Í¿ÉÒÔºÜÈÝÒ׵ػæÖÆÆäËûÀàÐ͵Äͼ±í£¬±ÈÈç±ýͼºÍÌõÐÎͼ¡£

¡¡¡¡¾ßÌåµÄ»æͼ¹ý³Ì


¡¡¡¡²½Öè 1£ºÄúÏë»æÖÆʲôÑùµÄͼÐΣ¿

¡¡¡¡ÏÔÈ»£¬ÄúÏëÒÔͼÐη½Ê½Ãè»æÀ´×ÔÊý¾ÝÔ´µÄÊý¾Ý¡£ËùÒÔ£¬ÄúÐèÒªÄÇЩÄúÏëÒÔͼÐÎÐÎʽÐÎÏ ó»¯µÄÊý¾Ý¡£ÎªÁ˼ò±ãÆð¼û£¬ÎÒʹÓÃÁËÒ»¸öÃûΪ dataGenerator µÄ¼òµ¥º¯ÊýÉú³ÉµÄÊý¾Ý£¬¶ø²»ÊÇ´Ó XML Îļþ»òÆäËûһЩÊý¾ÝÔ´¶ÁÈ¡Êý¾Ý£¬¸Ãº¯ÊýʹÓÃÁËÒ»¸ö for(;;) Ñ­»·£¬²¢ÒÔÊý×éÁбíµÄÐÎʽ·µ»ØÉú³ÉµÄÖµ¡£
Çåµ¥ 1. Éú³ÉһЩÊý¾Ý
<table cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc border=1> <tr> <td>

 private ArrayList dataGenerator() {

  double series1[] = new double[5]; 

      for(int i=0; i</td></tr></table>
¡¡¡¡²½Öè 2£ºËõ·Å¼¼Êõ ¡ª¡ª ´Ó¸ø¶¨µÄÊý¾ÝÉú³É X ×ø±êºÍ Y ×ø±ê


<table cellSpacing=0 cellPadding=5 width="30%" align=right border=1> <tr> <td background=/developerworks/cn/i/bg-gold.gif>
һЩеÄÊõÓï

FigureCanvas
Draw2D ÖÐµÄ FigureCanvas ÊÇ SWT Canvas µÄÒ»¸öÀ©Õ¹¡£FigureCanvas ¿ÉÒÔ°üº¬ Draw2D ͼÐΡ£
Panel
Panel ÊÇ Draw2D ÖеÄÒ»¸öͨÓÃÈÝÆ÷ͼÐΣ¬Ëü¿ÉÒÔ°üº¬×ÓͼÐΡ£Äú¿ÉÒÔÏòÒ»¸ö Panel ͼÐÎÖÐÌí¼ÓÐí¶àͼÐΣ¬È»ºó½«Õâ¸ö Panel ͼÐÎÌṩ¸ø FigureCanvas¡£
DirectedGraph
DirectedGraph ÊÇÒ»¸ö 2-D ͼÐΣ¬ÓµÓÐÓÐÏÞÊýÁ¿µÄ Node£¬Ã¿¸ö Node ¶¼Î»ÓÚһЩ Point ÖУ¬ÏàÁÚµÄ Node ÊÇͨ¹ý Edges ±Ë´ËÁ¬½ÓÔÚÒ»ÆðµÄ¡£
</td></tr></table>
¡¡¡¡µ±ÄúÏë»æÖÆÒ»¼Ü 2-D ·É»úÉϵĵãʱ£¬±ØÐëÕÒ³öÿ¸öµãµÄ X ×ø±êºÍ Y ×ø±ê¡£»æͼµÄÆæÃîÖ®´¦ÔÚÓÚÄܹ»½«Ä³Ò»¸ö¸ø¶¨Êý¾ÝÖµ´ÓÒ»¸ö·¶Î§°´±ÈÀýËõ·Åµ½ÁíÒ»¸ö·¶Î§ÖУ¬Ò²¾ÍÊÇ˵£¬Èç¹û¸ø¶¨Ò»×éÖµ£¬Èç {10,20,30}£¬ÄÇôÄúÓ¦¸ÃÄܹ»È·¶¨ 2-D ·É»úÉϾßÌåÄÄЩµã£¨X ×ø±êºÍ Y ×ø±ê£©±íʾµÄÊÇ 10¡¢20 ºÍ 30 ÕâЩÊý¾ÝÖµ¡£

¡¡¡¡»æÖÆ×ÜÊÇÔÚ°´ÕÕijһ¸öÏÞ¶¨Ëõ·Å±ÈÀý½øÐеġ£»»¾ä»°Ëµ£¬ÔÚͬһÏÞ¶¨ÇøÓòÄÚ£¬¿ÉÒÔ»æÖÆÈÎÒâÊýÁ¿µÄµã¡£ÒòΪ¸ÃÇøÓòÊǹ̶¨µÄ£¬ËùÒÔÄú×ÜÊÇ¿ÉÒÔÕÒµ½ X ×ø±êÖáµÄ¿ç¶È£¨³¤¶È£©ºÍ Y ×ø±êÖáµÄ¿ç¶È£¨¸ß¶È£©¡£X ×ø±êÖáºÍ Y ×ø±êÖáµÄ¿ç¶ÈÖ»ÊǵÈʽµÄÒ»²¿·Ö¡£ÁíÒ»²¿·ÖÊÇÕÒ³öÊý¾ÝÖµµÄ·¶Î§£¬²¢¸ù¾Ýÿ¸öÊý¾ÝÖµÔÚз¶Î§ÄڵĵÈЧֵÀ´¼ÆËãÕâЩֵµÄ×ø±ê¡£

¡¡¡¡¼ÆËã X ×ø±êºÍ Y ×ø±ê

¡¡¡¡X ×ø±ê£ºX ×ø±êÊÇijһ¸öµã¾àÀëÔ­µãµÄˮƽ¾àÀë¡£¼ÆËãÔªËصÄÊýÁ¿£¬È»ºó½« X ×ø±êÖáµÄ¿ç¶È·Ö³É n ¸öÇø¶Î£¬ÆäÖУ¬n ÊǸø¶¨¼¯ºÏÖеÄÔªËصÄÊýÁ¿£¬Í¨¹ýÕâÖÖ·½Ê½£¬¿ÉÒÔ¼ÆËãijһ¼¯ºÏÖеÄËùÓеãµÄºáÏò×ø±ê¡£ÓÃÕâÖַָ·¨¿ÉÒÔ»ñµÃÿ¸öÇø¶ÎµÄ³¤¶È¡£¼¯ºÏÖеĵÚÒ»¸öµãλÓÚµÈÓÚÇø¶Î³¤¶ÈµÄµÚÒ»¶Î¾àÀëÄÚ¡£ºóÐøµÄÿ¸öµãÔòλÓÚÇø¶Î³¤¶È¼ÓÉÏÔ­µãµ½Ç°Ò»¸öµãµÄ¾àÀëµÄÄÇÒ»¶Î¾àÀëÄÚ¡£

¡¡¡¡ÀýÈ磬¸ø³öÒ»¸ö¼¯ºÏ {10,20,30,40}£¬ÄúÁ¢¿Ì¾Í¿ÉÒÔÖªµÀÒª»æÖÆ 4 ¸öµã£¬ÒòΪ¼¯ºÏÖаüº¬ 4 ¸öÔªËØ¡£ËùÒÔ£¬Ó¦¸Ã½« X ×ø±êÖáµÄ¿ç¶È·Ö³É 4 ¸öÏàµÈµÄÇø¶Î£¬Ã¿¸öÇø¶ÎµÄ³¤¶È = ¿ç¶È/4¡£Òò´Ë£¬Èç¹û X ×ø±êÖáµÄ¿ç¶ÈÊÇ 800£¬ÄÇôÇø¶ÎµÄ³¤¶È½«ÊÇ 800/4£¬¼´ 200¡£µÚÒ»¸öÔªËØ£¨10£©µÄ X ×ø±ê½«ÊÇ 200£¬µÚ¶þ¸öÔªËØ£¨20£©µÄ X ×ø±ê½«ÊÇ 400£¬ÒÀ´ËÀàÍÆ¡£
Çåµ¥ 2. ¼ÆËã X ×ø±ê
<table cellSpacing=0 cellPadding=5 width="96%" bgColor=#cccccc border=1> <tr> <td>

private int[] getXCoordinates(ArrayList seriesData){

 int xSpan = (int)GraFixConstants.xSpan;

           int longestSeries = Utilities.getLongestSeries(seriesData);

           int numSegments = 

           ((double[])seriesData.get(longestSeries)).length;        

           int sectionWidth = 

           (int)xSpan / numSegments; //want to divide span of xAxis

        

           int xPositions[] = 

           new int[numSegments]; // will contain X-coordinate of all dots.

 for(int i=0; i</td></tr></table>
¡¡¡¡Y ×ø±ê£ºY ×ø±êÊÇijһ¸öµã¾àÀëÔ­µãµÄ×ÝÏò¾àÀë¡£¼ÆËã Y ×ø±êÒª½«Ä³Ò»¸öÖµ°´±ÈÀý´ÓÒ»¸ö·¶Î§Ëõ·Åµ½ÁíÒ»¸ö·¶Î§¡£ÀýÈ磬¸ø³öÏàͬµÄ¼¯ºÏ {10,20,30,40}£¬Äú¿ÉÒÔ¿´³ö£¬Êý¾ÝµÄ·¶Î§ÊÇ 0 µ½ 40£¬Ðµķ¶Î§¾ÍÊÇ Y ×ø±êÖáµÄ¿ç¶È£¨¸ß¶È£©¡£¼ÙÉè Y ×ø±êÖáµÄ¸ß¶ÈΪ 400£¬ÄÇôµÚÒ»¸öÔªËØ£¨10£©µÄ¸ß¶È½«ÊÇ100£¬µÚ¶þ¸öÔªËصĸ߶Ƚ«ÊÇ 200£¬ÒÀ´ËÀàÍÆ¡£

¡¡¡¡Í¨¹ýÒÔÏÂÀý×Ó£¬Äú¿ÉÒÔ¸üºÃµØÀí½âÈçºÎ°´±ÈÀý½«Ò»¸öÖµ´ÓÒ»¸ö·¶Î§Ëõ·Åµ½ÁíÒ»¸ö·¶Î§£º¼Ù¶¨Ò»¸ö·¶Î§µÄ¿ç¶ÈÊÇ´Ó 0 µ½ 2048£¬¶øÄú´òË㽫¸Ã·¶Î§ÄÚµÄÈÎÒâÖµ£¨±ÈÈç˵ 1024£©Ëõ·Åµ½ÁíÒ»¸ö´Ó 0 µ½ 100 µÄ·¶Î§ÄÚ£¬ÄÇôÄúÁ¢¿Ì¾Í¿ÉÒÔÖªµÀ£¬µÈ¿Ì¶ÈÖµÊÇ 50¡£¸ÃËõ·ÅËù×ñÑ­µÄÈýÖµÏßËã·¨ÊÇ£º
<table cellSpacing=0 cellPadding=5 width=100 bgColor=#cccccc border=1> <tr> <td>

line 1- 2048 / 1024 equals 2.

line 2- 100 - 0 equals 100. 

line 3- 100 / 2 equals 50, which is the desired scaled value.

</td></tr></table>
¡¡¡¡²½Öè 3£ºÄúÏëÔÚÄĶù½øÐлæͼ£¿

¡¡¡¡Äú»¹ÐèÒª½øÐлæͼµÄµØ·½¡£¿ÉÒÔͨ¹ýÀ©Õ¹ Eclipse ViewPart ºÍʹÓà SWT Composite À´´´½¨Äú×Ô¼ºµÄÊÓͼ¡£´ËÍ⣬Ҳ¿ÉÒÔʹÓÃ´Ó main() º¯ÊýÖе÷ÓÃµÄ SWT shell¡£

¡¡¡¡ÔÚÀ©Õ¹ Eclipse ViewPart ʱ£¬ÖÁÉÙ±ØÐëʵÏÖÁ½¸öº¯Êý£ºcreatePartControl(Composite parent) ºÍ setFocus()¡£º¯Êý createPartControl(Composite parent) ÊÇÔÚÆÁÄ»ÉÏ»æÖÆÊÓͼʱ×Ô¶¯µ÷Óõġ£ÄúµÄÐËȤֻÔÚËù½ÓÊÕµÄ SWT Composite ÉÏ¡£Òò´Ë£¬½«Ëü´«µÝ¸øij¸öÀ࣬Ȼºóͨ¹ý¶ÔÕâ¸öÀà½øÐбàÂëÀ´»æÖÆͼÐΡ£
Çåµ¥ 3. ʹÓà Eclipse ViewPart »æͼ
<table cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc border=1> <tr> <td>

public class MainGraFixView extends ViewPart{

 public void createPartControl(Composite parent) {

  

  //create or get data in an arraylist

  ArrayList seriesData = dataGenerator();

  //instantiate a plotter, and provide data to it.

  DirectedGraphXYPlotter dgXYGraph = new DirectedGraphXYPlotter(parent);

  dgXYGraph.setData(seriesData);

  dgXYGraph.plot(); //ask it to plot   

 }

 public void setFocus() { 

 }

}

</td></tr></table>
¡¡¡¡²½Öè 4£»ÄúÐèÒª»æÖÆÄÄÖÖͼÐΣ¿

¡¡¡¡Ò»µ©ÓµÓÐÁËÊý¾ÝÒÔ¼°ÏëÓÃÀ´»æÖÆͼÐεÄÇøÓò£¬¾Í±ØÐëÈ·¶¨ÄúÐèÒªÄÄÖÖÀàÐ͵ĿÉÊÓ»¯¡£ÔÚ±¾ÎÄÖУ¬ÎÒÑÝʾÁËÈçºÎ±àд´úÂëÀ´´´½¨ X-Y ×ø±êͼºÍÏßÐÎͼ¡£Ò»µ©ÖªµÀÁË»æÖÆ X-Y ×ø±êͼµÄ¼¼Êõ£¬¾ÍÓ¦¸ÃÄܹ»»æÖƳöÆäËûͼÐΣ¬±ÈÈçÌõÐÎͼºÍ±ýͼ¡£ÒªÏë¸ü¶àµØÁ˽â X-Y ×ø±êͼ£¬Çë²ÎÔÄÎÒΪ±¾ÎıàдµÄ DirectedGraphXYPlotter Àࣨ²Î¼ûËù¸½Ô´´úÂëÖÐµÄ \src\GraFix\Plotters\DirectedGraphXYPlotter.java£©¡£

¡¡¡¡²½Öè 5£º´´½¨×Ô¼ºµÄ X-Y ×ø±êͼ

¡¡¡¡X-Y ×ø±êͼӦ¸ÃÄܹ»»æÖƳö 2-D ·É»úÉϵÄÈÎÒâÊýÁ¿µÄ¼¶ÊýÏß¡£Ã¿¸ö¼¶ÊýÏ߶¼Ó¦¸ÃÒÔͼÐÎÐÎʽÏÔʾ³öÒýÓà X ºÍ Y ÒýÓÃÏßµÄÄÇЩ¼¶ÊýÖеÄÿ¸öµãµÄλÖá£Ã¿¸öµã¶¼Ó¦¸Ãͨ¹ýÒ»ÌõÏßÁ¬½Óµ½¼¶ÊýÖеÄÏÂÒ»¸öµãÉÏ¡£Í¨¹ýʹÓñíʾһ¸öµãºÍÒ»ÌõÏßµÄ Draw2D ͼÐΣ¬ÄúÓ¦¸ÃÄܹ»´´½¨ÕâÑùÒ»¸ö×ø±êͼ¡£ÀýÈ磬ΪÁ˱íʾһ¸öµã£¬ÎÒͨ¹ýÀ©Õ¹ Ellipse ͼÐδ´½¨ÁËÒ»¸ö Dot ͼÐΣ¬²¢Ê¹Óà PolylineConnection ͼÐÎÀ´±íʾÁ¬½ÓÏß¡£

¡¡¡¡DirectedGraphXYPlotter ÀàÖ»ÓÐÁ½¸ö¹«¹²º¯Êý£ºsetData(ArrayList seriesData) ºÍ plot()¡£º¯Êý setData(ArrayList seriesData) ½ÓÊÜÄúÏëÒªÒÔͼÐÎÐÎʽÐÎÏ󻯵ÄÊý¾Ý£¨²Î¼û²½Öè 1£©£¬¶ø plot() º¯ÊýÔò¿ªÊ¼»æͼ¡£

¡¡¡¡Ò»µ©µ÷ÓÃÁË plot() º¯Êý£¬¾Í±ØÐëÒÀ´Î²ÉÓÃÒÔϲ½Ö裺
  1. ²ÉÓÃÒ»¸ö SWT Composite£¬²¢½« FigureCanvas ·ÅÔÚËüÖ®ÉÏ¡£È»ºó£¬½«Ò»¸öÀàËÆ Panel µÄͨÓÃÈÝÆ÷ͼ·ÅÔÚ»­²¼ÉÏ¡£
  2. ¼ÆË㽫Ҫ»æÖƵļ¶ÊýµÄÊýÁ¿£¬È»ºóÌî³ä´´½¨ DirectedGraphs ËùÐèÊýÁ¿µÄ NodeLists ºÍ EdgeLists¡£
  3. ÔÚ Panel ͼÉÏ»æÖÆ X ×ø±êÖáºÍ Y ×ø±êÖá¡££¨²Î¼ûËù¸½Ô´´úÂëÖÐ \src\GraFix\Figure Ŀ¼Ï嵀 XRulerBar.java ºÍ YRulerBar.java¡££©
  4. ´´½¨ºÍ¼¶ÊýÒ»Ñù¶àµÄ DirectedGraphs£¬ÒÔ±ã½øÐлæͼ¡£
  5. ÔÚ Panel ͼÉÏ»æÖƵãºÍÁ¬½ÓÏߣ¬Í¬Ê±²ÉÓò½Öè d Öд´½¨µÄ DirectedGraphs ÖеÄͼÐÎÊý¾Ý¡£
  6. ×îºó£¬Í¨¹ýÌṩ Panel ͼÀ´ÉèÖû­²¼µÄÄÚÈÝ£¬ÆäÖаüÀ¨µ½Ä¿Ç°ÎªÖ¹ÄúÒѾ­×¼±¸ºÃµÄËùÓеĵãºÍÁ¬½ÓÏß¡£

¡¡¡¡ÔÚÒÔÏ´úÂëÖУº
  • µÚ 6-11 ÐдúÂë¶ÔÓ¦ÓÚÉÏÊöµÄ²½Öè a¡£

    µÚ 14 ÐУ¬¼´º¯Êý populateNodesAndEdges()£¬¶ÔÓ¦ÓÚÉÏÊöµÄ²½Öè b¡£

  • µÚ 16 ÐУ¬¼´º¯Êý drawAxis()£¬¶ÔÓ¦ÓÚÉÏÊöµÄ²½Öè c¡£

  • µÚ 17 ÐС¢µÚ 18 ÐÐºÍµÚ 19 ÐжÔÓ¦ÓÚÉÏÊöµÄ²½Öè d ºÍ²½Öè e¡£

  • µÚ 20 ÐжÔÓ¦ÓÚÉÏÊöµÄ²½Öè f¡£
Çåµ¥ 4. plot() º¯Êý
<table cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc border=1> <tr> <td>

1. public void plot(){

2.     //if no place to plot, or no data to plot, return.

3.     if(null==_parent || null==_seriesData)

4.         return;

5.

6.     Composite composite = new Composite(_parent, SWT.BORDER);

7.     composite.setLayout(new FillLayout());

8.     FigureCanvas canvas = new FigureCanvas(composite);

9.     

10.     Panel contents = new Panel();//A Panel is a general purpose container figure

11.     contents.setLayoutManager(new XYLayout());

12.     initializeSpan(contents.getClientArea());

13.     

14.     populateNodesAndEdges();     

15.     

16.     drawAxis(contents);

17.     for(int i=0; i<_numSeries; i++){

18.      drawDotsAndConnections(contents,getDirectedGraph(i)); // 

draw points & connecting wires

19.     }

20.     canvas.setContents(contents);

21. }

</td></tr></table>
¡¡¡¡plot() µ÷ÓÃÁËÁ½¸öÖØÒªÄÚ²¿º¯ÊýÀ´°ïÖú»æÖÆͼÐÎÖеĵ㣺populateNodesAndEdges() ºÍ drawDotsAndConnections()¡£ÔÚÄú·¢ÏÖÕâÁ½¸öº¯Êýµ½µ×Íê³Éʲô¹¦ÄÜ֮ǰ£¬ÈÃÎÒÃÇÀ´¿´Ò»Ï DirectedGraph¡£

¡¡¡¡DirectedGraph ÊÇʲô£¿ÎªÁËʹÓà Draw2D ½øÐлæͼ£¬ÊÂʵÉÏÄú±ØÐëÏÈ´´½¨Ò»¸öͼÐΣ¬¶¨Ò彫Ҫ»æÖƵĵãºÍÏß¡£Ò»µ©´´½¨ºÃÕâ¸öͼÐΣ¬¾Í¿ÉÒÔʹÓÃËüʵ¼ÊÔÚ»­²¼ÉϽøÐлæͼ¡£Äú¿ÉÒÔ½« DirectedGraph ÐÎÏó»¯ÎªÓµÓÐÓÐÏÞÊýÁ¿µÄ Node µÄÒ»¸ö 2-D ͼÐΣ¬ÔÚ¸ÃͼÐÎÖУ¬Ã¿¸ö Node ¶¼Î»ÓÚһЩ Point ÉÏ£¬ÏàÁÚµÄ Node ÊÇͨ¹ý Edges Á¬½ÓÔÚÒ»ÆðµÄ¡£

¡¡¡¡Äú¿ÉÒÔͨ¹ýÒÔÏ´úÂëÐÐÀ´Á˽ⴴ½¨ DirectedGraph µÄ¹Ø¼üËùÔÚ¡£Ê×ÏÈ£¬´´½¨Ò»¸ö Node ÁбíºÍÒ»¸ö Edges ÁÐ±í¡£È»ºó£¬´´½¨Ò»¸öÐ嵀 DirectedGraph£¬²¢Í¨¹ý¸Õ²Å´´½¨µÄ NodeList ºÍ EdgeList ÉèÖÃÆä³ÉÔ±£¨Nodes ºÍ Edges£©¡£ÏÖÔÚ£¬Ê¹Óà GraphVisitor À´·ÃÎÊÕâ¸ö DirectedGraph¡£ÎªÁ˼ò±ãÆð¼û£¬°ü org.eclipse.draw2d.internal.graph ÖÐÓÐÐí¶à GraphVisitor ʵÏÖ£¬ÕâЩ GraphVisitor ÓÐһЩÓÃÀ´·ÃÎÊͼÐεÄÌض¨Ëã·¨¡£

¡¡¡¡Òò´Ë£¬´´½¨ DirectedGraph µÄʾÀý´úÂëÀàËÆÓÚÏÂÃæÕâÑù£º
Çåµ¥ 5. ʾÀý DirectedGraph
<table cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc border=1> <tr> <td>

//This is a sample, you will need to add actual Node(s) to this NodeList.

NodeList nodes = new NodeList(); //create a list of nodes.

//This is a sample, you will need to add actual Edge(s) to this EdgeList.

EdgeList edges = new EdgeList(); //create a list of edges. 

DirectedGraph graph = new DirectedGraph();

graph.nodes = nodes;

graph.edges = edges;

new BreakCycles().visit(graph);//ask BreakCycles to visit the graph.

//now our "graph" is ready to be used.

</td></tr></table>
¡¡¡¡ÏÖÔÚ£¬ÒѾ­ÖªµÀ DirectedGraph °üº¬Ðí¶à Node£¬ÆäÖУ¬Ã¿¸ö Node ¶¼¿ÉÄÜ°üº¬Ò»Ð©Êý¾Ý£¬²¢ÇÒ»¹´æ´¢ÁËÕâЩÊý¾ÝµÄ X ×ø±êºÍ Y ×ø±ê£¬ÒÔ¼°Ò»¸ö Edges µÄÁÐ±í£¬Ã¿¸ö Edge ¶¼ÖªµÀÔÚ×Ô¼ºµÄÁ½¶Ë·Ö±ðÓÐÒ»¸ö Node£¬Äú¿ÉÒÔͨ¹ýÒÔϼ¼Êõ£¬Ê¹ÓÃÕâЩÐÅÏ¢À´»æͼ£¬ÆäÖÐÉæ¼°Á½¸ö²¿·Ö£º



¡ü·µ»ØĿ¼
ǰһƪ: »ùÓÚEclipse 3.0µÄSWT±à³Ì
ºóһƪ: EclipseÖÐÓÃSWTºÍJFace¿ª·¢ÈëÃÅ