sts北方站长站图2-4
sts北方站长站 由这个类图,我们可以很容易的写出它的代码:
sts北方站长站public interface ChartWidget{ sts北方站长站 public int getX(); sts北方站长站 public int getY(); sts北方站长站 public int getWidth(); sts北方站长站 public int getHeight(); sts北方站长站 public void draw(Graphics g); sts北方站长站 } |
sts北方站长站 坐标轴(Axis)
sts北方站长站 接下来的一个类是坐标轴Axis。坐标轴主要任务是绘制轴及其刻度(Tick)和刻度值,因为它绘制时是按一定的比例绘制的,所以它需要有一个比例尺将实际坐标值转换值成屏幕坐标值。这就引出了Scale这个类。Scale类主要完成实际坐标值到屏幕坐标值以及屏幕坐标值到实际坐标值的相互转化。由此,Axis与Scale是一对相互依赖的类。从设计模式的角度来看,Axis是视图(View),负责界面绘制,Scale就是它的模型(Model),负责提供相应的数据。它们的类图见图2-5:
sts北方站长站
sts北方站长站图2-5
sts北方站长站 下面来分别看看Axis类与Scale类的代码:
sts北方站长站public abstract class Axis implements ChartWidgetsts北方站长站 { sts北方站长站 protected Scale scale; sts北方站长站 protected int x; sts北方站长站 protected int y; sts北方站长站 protected int width; sts北方站长站 protected int height; sts北方站长站 protected Axis peerAxis; sts北方站长站 protected boolean drawGrid; sts北方站长站 protected Color gridColor; sts北方站长站 protected Color axisColor; sts北方站长站 protected int tickLength; sts北方站长站 protected int tickCount; sts北方站长站 public Axis() sts北方站长站 { sts北方站长站 gridColor = Color.LIGHT_GRAY; sts北方站长站 axisColor = Color.BLACK; sts北方站长站 tickLength = 5; sts北方站长站 drawGrid = false; sts北方站长站 } sts北方站长站 public int getTickCount(){ return tickCount;} sts北方站长站 public void setTickCount(int tickCount){this.tickCount=tickCount;} sts北方站长站 public Scale getScale(){ return scale;} sts北方站长站 public void setScale(Scale scale){ this.scale = scale;} sts北方站长站 public int getX(){ return x;} sts北方站长站 public void setX(int x){this.x = x;} sts北方站长站 public int getY(){ return y;} sts北方站长站 public void setY(int y){this.y = y;} sts北方站长站 public int getHeight(){ return height;} sts北方站长站 public void setHeight(int height){this.height = height;} sts北方站长站 public int getWidth(){ return width;} sts北方站长站 public void setWidth(int width){this.width = width;} sts北方站长站 public boolean isDrawGrid(){return drawGrid;} sts北方站长站 public void setDrawGrid(boolean drawGrid){this.drawGrid=drawGrid;} sts北方站长站 public Color getAxisColor(){return axisColor;} sts北方站长站 public void setAxisColor(Color axisColor){ this.axisColor=axisColor;} sts北方站长站 public Color getGridColor(){return gridColor;} sts北方站长站 public void setGridColor(Color gridColor){this.gridColor=gridColor;} sts北方站长站 public int getTickLength(){return tickLength;} sts北方站长站 public void setTickLength(int tickLength){this.tickLength=tickLength;} sts北方站长站 public Axis getPeerAxis(){return peerAxis;} sts北方站长站 public void setPeerAxis(Axis peerAxis){this.peerAxis = peerAxis;}protected abstract int calculateTickLabelSize(Graphics g);}sts北方站长站 public abstract class Scale{ sts北方站长站 protected double min; sts北方站长站 protected double max; sts北方站长站 protected int screenMin; sts北方站长站 protected int screenMax; sts北方站长站 public abstract int getScreenCoordinate(double value); sts北方站长站 public double getActualValue(int value) sts北方站长站 { sts北方站长站 double vrange = max - min; sts北方站长站 if(min < 0.0 && max < 0.0) sts北方站长站 vrange = (min - max) * -1.0; sts北方站长站 double i = screenMax - screenMin; sts北方站长站 i = ((double)(value - screenMin) * vrange) / i; sts北方站长站 i += min; sts北方站长站 return i; sts北方站长站 } sts北方站长站 public void setMax(double max){this.max = max;} sts北方站长站 public void setMin(double min){this.min = min;} sts北方站长站 public double getMax(){return max;} sts北方站长站 public double getMin(){return min;} sts北方站长站 public int getScreenMax(){return screenMax;} sts北方站长站 public int getScreenMin(){return screenMin;} sts北方站长站 public void setScreenMax(int screenMax){this.screenMax =screenMax;} sts北方站长站 public void setScreenMin(int screenMin){this.screenMin = screenMin;}sts北方站长站 } |
sts北方站长站 在上面的Axis类代码中,我们在原有的ChartWidget接口的基础上,为Axis添加了几个其它的属性:轴线的颜色axisColor,网格线的颜色gridColor及网格线的可见属性drawGrid。还有刻度线的长度和个数tickLength和tickCount。而peerAxis属性是参考坐标轴,在绘制坐标轴时的会用到。 Scale类也是抽象的,因为横轴和纵轴的屏幕坐标的转换方式不一样,所以getScreenCoordinate()方法留待子类来实现它。
sts北方站长站
共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面