→Tags:组件 图表 扩展 构建 int public 一个 坐标 我们 数据 ←
sts北方站长站 图2-7
sts北方站长站 由于篇幅有限,在此就不列出Chart类的代码了。
sts北方站长站 完成一个折线图sts北方站长站 由于前面介绍的只是一些接口或抽象类,要完成一个图表组件,还必须实现它们,下面我们以一个折线图为例,来完成一个完整的折线图。
sts北方站长站 实现x轴和y轴sts北方站长站 其实前面的Axis抽象类已经完成一个大部分的操作,余下的就是分别完成x轴和y轴的绘制了。在这里我们就不打算列出完整的类代码,只列出关键的实现部分。
sts北方站长站Public class XAxis extends Axissts北方站长站 { sts北方站长站 …… sts北方站长站 public void draw(Graphics g) sts北方站长站 { sts北方站长站 if ( ! (scale instanceof XScale) ) sts北方站长站 return; sts北方站长站 int ticks = getTickCount(); sts北方站长站 int tickDist = (int) ((double)(scale.getScreenMax()-scale.getScreenMin())/(double)(ticks+1)); sts北方站长站 int tickX = scale.getScreenMin(); sts北方站长站 int tickY = peerAxis.getScale().getScreenMin(); sts北方站长站 int gridLength = peerAxis.getScale().getScreenMax(); sts北方站长站 int axisLength = scale.getScreenMax()-scale.getScreenMin(); sts北方站长站 /*设置轴线颜色*/ sts北方站长站 g.setColor(axisColor); sts北方站长站 /*绘制横轴*/ sts北方站长站 g.drawLine(tickX, tickY, tickX+axisLength,tickY); sts北方站长站 for ( int i = 0 ; i < ticks; i++ ) sts北方站长站 { sts北方站长站 tickX = scale.getScreenMin()+tickDist*(i+1); sts北方站长站 if ( isDrawGrid() ) sts北方站长站 { sts北方站长站 /*如果drawGrid属性为true,用gridColor绘制网格线*/ sts北方站长站 g.setColor(gridColor); sts北方站长站 g.drawLine(tickX, tickY , tickX, gridLength );sts北方站长站 }sts北方站长站 /*绘制刻度线*/ sts北方站长站 g.setColor(axisColor); sts北方站长站 g.drawLine(tickX, tickY , tickX, tickY+tickLength); sts北方站长站 int tickLabelWidth = g.getFontMetrics().stringWidth(String.valueOf(i+1)); sts北方站长站 int tickLabelHeight = g.getFontMetrics().getHeight(); sts北方站长站 g.drawString(String.valueOf(i+1), tickX-(tickLabelWidth/2), tickY+tickLabelHeight); sts北方站长站 } sts北方站长站 }sts北方站长站 }sts北方站长站 public class YAxis extends Axissts北方站长站 { sts北方站长站 public void draw(Graphics g) sts北方站长站 { sts北方站长站 if ( ! (scale instanceof YScale) ) sts北方站长站 return; sts北方站长站 int ticks = getTickCount(); sts北方站长站 int tickDist = (int) Math.abs((double)(scale.getScreenMax() - scale.getScreenMin())/(double)(ticks+1)); sts北方站长站 int tickY = scale.getScreenMin(); sts北方站长站 int tickX = peerAxis.getScale().getScreenMin(); sts北方站长站 int gridLength = peerAxis.getScale().getScreenMax(); sts北方站长站 int axisLength = scale.getScreenMax(); sts北方站长站 /*绘制纵坐标轴*/ sts北方站长站 g.setColor(axisColor); sts北方站长站 g.drawLine(tickX, tickY, tickX, axisLength); sts北方站长站 for ( int i = 0 ; i < ticks; i++ ) sts北方站长站 { sts北方站长站 tickY = scale.getScreenMin()-tickDist*(i+1); sts北方站长站 if ( isDrawGrid() ) sts北方站长站 { sts北方站长站 /*如果drawGrid属性为true,用gridColor绘制网格线*/ sts北方站长站 g.setColor(gridColor); sts北方站长站 g.drawLine(tickX, tickY , gridLength, tickY );sts北方站长站 }sts北方站长站 /*绘制刻度线*/ sts北方站长站 g.setColor(axisColor); sts北方站长站 g.drawLine(tickX, tickY , tickX-tickLength, tickY); sts北方站长站 int tickLabelWidth = g.getFontMetrics().stringWidth(String.valueOf(i+1)); sts北方站长站 g.drawString(String.valueOf(i+1), tickX-tickLength-tickLabelWidth, tickY); sts北方站长站 } sts北方站长站 }sts北方站长站 } |
sts北方站长站
共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面