public void paint(Graphics g)
{
 int width,height,mid;
 JBox JBoxPtr;
 jnodesize = GetNodeSize();
 jlinesize = GetLineSize();  /*************************************************************************
** Draw all box to same color if firsttime drawing ,otherelse change  nodeno
** to red color
**************************************************************************/
for (int i = 0 ; i < jnodesize ; i++)
{
JBoxPtr = GetNode(i);
int left = JBoxPtr.left+2*JBoxPtr.column-1;
int right =JBoxPtr.right+2*JBoxPtr.column;
int top =JBoxPtr.top+2*JBoxPtr.layer;
int bottom =JBoxPtr.bottom+2*JBoxPtr.layer+1;
boolean isxscale= ((left>leftstart)&&(left<(leftstart+appletwidth)))||((right>leftstart)&&(right<(leftstart+appletwidth)));
boolean isyscale= ((top>topstart)&&(top<(topstart+appletheight)))||((bottom>topstart)&&(bottom<(topstart+appletheight)));
if(isxscale&&isyscale)
 {
int  x = JBoxPtr.left+2*JBoxPtr.column-1;
int  y = JBoxPtr.top+2*JBoxPtr.layer;
width = JBoxPtr.right+2*JBoxPtr.column- x;
height = JBoxPtr.bottom+2*JBoxPtr.layer+1 - y;
mid = y + height / 2;
g.setColor(Color.blue);
g.fillRect(x,y,width,height);
g.setColor(Color.green.brighter().brighter());
g.drawRect(x,y,width,height);
g.setColor(Color.white);
DrawClassOrMethodName(g,JBoxPtr.MethodName,x,y,width,height);
}
}
int tmpkind,tmppoint,tmppoint_col;
int[] line_offset = { 0,0,3,0,3,0};
int BOX_W = 48;
JLine jlineptr;
int  x1,y1,x2,y2,x3,y3,x4,y4;
int BOX_DIS_H=40;
int  r=1;
int  left, bottom,right,top;
for (int i = 0 ; i < jlinesize ; i++)
{
jlineptr=GetLine(i);
tmpkind=jlineptr.kind;
tmppoint=jlineptr.point;
tmppoint_col=jlineptr.point_col;
JBox jb1=GetNode(jlineptr.pos_beg);
JBox jb2=GetNode(jlineptr.pos_end);
left = jb1.left + 2 * jb1.column - 1 + 1 / 2+ line_offset[tmpkind];
bottom = jb1.bottom + 2 * jb1.layer + 1;
right= jb2.left + 2 * jb2.column - 1 + 1 / 2+ line_offset[tmpkind];
top  = jb2.top  + 2 * jb2.layer  ;
x1 = left+BOX_W/2;
y1 = bottom;
x2 = right+BOX_W/2;
y2 = top;
boolean isxrange= ((x1>leftstart)&&(x1<(leftstart+appletwidth)))||((x2>leftstart)&&(x2<(leftstart+appletwidth)));
boolean isyrange= ((y1>topstart)&&(y1<(topstart+appletheight)))||((y2>topstart)&&(y2<(topstart+appletheight))); if (isxrange&&isyrange)
{
switch(tmpkind)
{
case 1:
g.setColor(Color.green);
g.drawLine(x1,y1,x2,y2);
break;
case 2:
System.out.println(i);
g.setColor(Color.cyan);
g.drawLine(x1,y1,x2,y2);
break;
case 3:
g.setColor(Color.green);
if(tmppoint_col==0)
{
tmppoint=tmppoint+(2*1)*r+r/2;
}
else
{
tmppoint=tmppoint+(2*tmppoint_col)*r+r/2;
}
x3=tmppoint;
y3=bottom+BOX_DIS_H+r-5;
x4=x3;
y4=top-BOX_DIS_H-r+5; int[] xpoint={x1,x3,x4,x2};
int[] ypoint={y1,y3,y4,y2};
g.drawPolyline(xpoint,ypoint,4);
break;
case 4:
if(tmppoint_col==0)
{
tmppoint=tmppoint+(2*1)*r+r/2;
}
else
{
tmppoint=tmppoint+(2*tmppoint_col)*r+r/2;
}
x3=tmppoint;
x4=x3;
y3=bottom+BOX_DIS_H+r-5;
y4=top-BOX_DIS_H-r+5;
g.setColor(Color.cyan);
 // g.drawLine(x1,y1,x3,y3);
 // g.drawLine(x3,y3,x4,y4);
 // g.drawLine(x4,y4,x2,y2);
int[] xarray={x1,x3,x4,x2};
int[] yarray={y1,y3,y4,y2};
g.drawPolyline(xarray,yarray,4);
break;
case 5:
g.setColor(Color.red);
g.drawOval(x2-10,y2-20,20,20);
System.out.println("this is 5th kind line");
break;
default:
break;
}//end switch
}//end if
}//end for
setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
 }//end paint()