<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 ÉÏ¡£Òò´Ë£¬½«Ëü´«µÝ¸øÄ³¸öÀ࣬Ȼºóͨ¹ý¶ÔÕâ¸öÀà½øÐбàÂëÀ´»æÖÆÍ¼ÐΡ£
Çåµ¥ 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() º¯Êý£¬¾Í±ØÐëÒÀ´Î²ÉÓÃÒÔϲ½Ö裺
- ²ÉÓÃÒ»¸ö SWT Composite£¬²¢½« FigureCanvas ·ÅÔÚËüÖ®ÉÏ¡£È»ºó£¬½«Ò»¸öÀàËÆ Panel µÄͨÓÃÈÝÆ÷ͼ·ÅÔÚ»²¼ÉÏ¡£
- ¼ÆË㽫Ҫ»æÖƵļ¶ÊýµÄÊýÁ¿£¬È»ºóÌî³ä´´½¨ DirectedGraphs ËùÐèÊýÁ¿µÄ NodeLists ºÍ EdgeLists¡£
- ÔÚ Panel ͼÉÏ»æÖÆ X ×ø±êÖáºÍ Y ×ø±êÖá¡££¨²Î¼ûËù¸½Ô´´úÂëÖÐ \src\GraFix\Figure Ŀ¼Ï嵀 XRulerBar.java ºÍ YRulerBar.java¡££©
- ´´½¨ºÍ¼¶ÊýÒ»Ñù¶àµÄ DirectedGraphs£¬ÒÔ±ã½øÐлæÍ¼¡£
- ÔÚ Panel ͼÉÏ»æÖƵãºÍÁ¬½ÓÏߣ¬Í¬Ê±²ÉÓò½Öè d Öд´½¨µÄ DirectedGraphs ÖеÄͼÐÎÊý¾Ý¡£
- ×îºó£¬Í¨¹ýÌṩ 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£¬Äú¿ÉÒÔͨ¹ýÒÔϼ¼Êõ£¬Ê¹ÓÃÕâЩÐÅÏ¢À´»æÍ¼£¬ÆäÖÐÉæ¼°Á½¸ö²¿·Ö£º