package Simulator; import java.awt.*; import java.awt.event.*; import java.awt.geom.*; import java.io.*; import java.text.*; import java.util.*; import javax.swing.*; public class StatisChart { Vector dots1 = new Vector(10,5); // for Cprobing Statistic function call usage only Point point1; // for Cprobing Statistic function call usage only Vector dots2 = new Vector(10,5); // for Traffic Curve usage only Point point2; // for Traffic Curve usage only Vector dots3 = new Vector(10,5); // for Single Message Measurement Curve usage only Point point3; // for Single Message Measurement Curve usage only Vector dots4 = new Vector(10,5); // for Cprobing Measurement Curve usage only Point point4; // for Cprobing Measurement Curve usage only Vector dots5 = new Vector(10,5); // for Adaptive Cprobing Measurement Curve usage only Point point5; // for Adaptive Cprobing Measurement Curve usage only Vector dots6 = new Vector(10,5); // for multiple Messages Measurement Curve usage only Point point6; // for Multiple Messages Measurement Curve usage only JPanel p; int begin_seconds; int HUnit,VUnit; double HLabelUnit, VLabelUnit; NumberFormat numform; DecimalFormat decform; private double HStart, HEnd, VStart, VEnd; private int HNum,VNum; private String HCap, VCap; public StatisChart(double HStart, double HEnd, int HNum, String HCap, double VStart, double VEnd, int VNum, String VCap, JPanel p) { try { this.HStart = HStart; this.HEnd = HEnd; this.HNum = HNum; this.HCap = HCap; this.VStart = VStart; this.VEnd = VEnd; this.VNum = VNum; this.VCap = VCap; HLabelUnit = (HEnd - HStart)/HNum; VLabelUnit = (VEnd - VStart)/VNum; numform = NumberFormat.getInstance(Locale.US); decform = (DecimalFormat) numform; decform.applyPattern("##.#"); this.p = p; jbInit(); } catch (Exception e) { e.printStackTrace(); } } private void jbInit() throws Exception { p.setLayout(null); p.setBackground(Color.white); Graphics2D g2 = (Graphics2D) p.getGraphics(); g2.setColor(new Color(250,240,230));; g2.fillRect(70,25,p.getWidth()- 100,p.getHeight()- 60); g2.setPaint(Color.red); g2.draw(new Line2D.Double(70,25,70,p.getHeight()- 35)); g2.draw(new Line2D.Double(70,p.getHeight()- 35,p.getWidth()- 30,p.getHeight()- 35)); VUnit = (int) (Math.floor((p.getHeight()- 60)/ VNum)); HUnit = (int) (Math.floor((p.getWidth()-100)/HNum)); // vertical label for (int i=1; i<=VNum; i++) { g2.setColor(new Color(255,250,250)); g2.drawLine(70,(p.getHeight()- 35)-i*VUnit,p.getWidth()- 30,(p.getHeight()- 35)-i*VUnit); g2.setColor(Color.red); g2.drawString(decform.format(VStart+i*VLabelUnit)+" ",55,(p.getHeight()- 30)-i*VUnit); g2.drawString(VCap+" ",67,20); } // horizontal label g2.setColor(Color.white); g2.fillRect(65,p.getHeight()-32,p.getWidth()-94,15); for (int i=0; i<=HNum; i++) { g2.setColor(new Color(255,250,250)); g2.drawLine(70+i*HUnit,p.getHeight()- 35,70+i*HUnit,25); g2.setColor(Color.red); g2.drawString(decform.format(HStart+i*HLabelUnit)+"",66+i*HUnit,p.getHeight()- 22); g2.drawString(HCap+" ",p.getWidth()-28,p.getHeight()-35); } //show(); } // for Cprobing Statistic function curve public void Cupdate(double Cnextx, double Cnexty) { if (point1 == null) { point1 = new Point(PosXConversion(Cnextx),PosYConversion(Cnexty)); dots1.add(point1); } else { Graphics2D g2 = (Graphics2D) p.getGraphics(); g2.setColor(Color.blue); Cnextx = PosXConversion(Cnextx); Cnexty = PosYConversion(Cnexty); //g2.fill(new Rectangle2D.Double(Pnextx,Pnexty,3,3)); //g2.fill(new Ellipse2D.Double(Cnextx,Cnexty,3,3)); g2.drawLine((int) point1.getX(), (int) point1.getY(), (int)Cnextx, (int)Cnexty); point1.x = (int)Cnextx; point1.y = (int)Cnexty; dots1.add(point1); } } // for other possible curve (Traffic/ Single,Cprobing and Adaptive Cprobing Measurement) public void JPanelUpdate(int type, double Cnextx, double Cnexty) { switch (type) { case 2: {// for traffic curve if (point2 == null) { point2 = new Point(PosXConversion(Cnextx),PosYConversion(Cnexty)); dots2.add(point2); } else { Graphics2D g2 = (Graphics2D) p.getGraphics(); g2.setColor(Color.red); Cnextx = PosXConversion(Cnextx); Cnexty = PosYConversion(Cnexty); //g2.fill(new Rectangle2D.Double(Pnextx,Pnexty,3,3)); //g2.fill(new Ellipse2D.Double(Cnextx,Cnexty,5,5)); //System.out.println(" "+Cnextx+" | "+Cnexty+" | "+point3.getX()+" | "+point3.getY()); g2.drawLine((int) point2.getX(), (int) point2.getY(), (int) Cnextx, (int) Cnexty); //g2.draw(line); point2.x = (int)Cnextx; point2.y = (int)Cnexty; dots2.add(point2); } break; } case 3: {// for single message measurement curve //System.out.print(" "+Cnextx+" | "+Cnexty); if (point3 == null) { point3 = new Point(PosXConversion(Cnextx),PosYConversion(Cnexty)); dots3.add(point3); } else { Graphics2D g2 = (Graphics2D) p.getGraphics(); //g2.setColor(new Color(30,25,165)); g2.setColor(Color.green); Cnextx = PosXConversion(Cnextx); Cnexty = PosYConversion(Cnexty); //System.out.print(" "+Cnextx+" | "+Cnexty); //System.out.println(" "+Cnextx+" | "+Cnexty+" | "+point3.getX()+" | "+point3.getY()); //g2.fill(new Rectangle2D.Double(Pnextx,Pnexty,3,3)); g2.fill(new Ellipse2D.Double(Cnextx,Cnexty,5,5)); g2.drawLine((int) point3.getX(), (int) point3.getY(), (int) Cnextx, (int) Cnexty); point3.x = (int)Cnextx; point3.y = (int)Cnexty; dots3.add(point3); } //System.out.println(" | "+point3.getX()+" | "+point3.getY()); break; } case 4: {// for Cprobing measurement curve if (point4 == null) { point4 = new Point(PosXConversion(Cnextx),PosYConversion(Cnexty)); dots4.add(point4); } else { Graphics2D g2 = (Graphics2D) p.getGraphics(); g2.setColor(Color.black); Cnextx = PosXConversion(Cnextx); Cnexty = PosYConversion(Cnexty); //g2.fill(new Rectangle2D.Double(Pnextx,Pnexty,3,3)); g2.fill(new Ellipse2D.Double(Cnextx,Cnexty,5,5)); g2.drawLine((int) point4.getX(), (int) point4.getY(), (int) Cnextx, (int) Cnexty); point4.x= (int) Cnextx; point4.y = (int) Cnexty; dots4.add(point4); } break; } case 5: {// for Adaptive Cprobing measurement curve if (point5 == null) { point5 = new Point(PosXConversion(Cnextx),PosYConversion(Cnexty)); dots5.add(point5); } else { Graphics2D g2 = (Graphics2D) p.getGraphics(); g2.setColor(Color.blue); Cnextx = PosXConversion(Cnextx); Cnexty = PosYConversion(Cnexty); //g2.fill(new Rectangle2D.Double(Pnextx,Pnexty,3,3)); g2.fill(new Ellipse2D.Double(Cnextx,Cnexty,5,5)); g2.drawLine((int) point5.getX(), (int) point5.getY(), (int) Cnextx, (int) Cnexty); //Line2D line = new Line2D.Double(point5.getX(), point5.getY(), Cnextx, Cnexty); //g2.draw(line); point5.x= (int) Cnextx; point5.y = (int) Cnexty; dots5.add(point5); } break; } case 6: {// for multiple messages measurement curve if (point6 == null) { point6 = new Point(PosXConversion(Cnextx),PosYConversion(Cnexty)); dots6.add(point6); } else { Graphics2D g2 = (Graphics2D) p.getGraphics(); g2.setColor(Color.magenta); Cnextx = PosXConversion(Cnextx); Cnexty = PosYConversion(Cnexty); //g2.fill(new Rectangle2D.Double(Pnextx,Pnexty,3,3)); g2.fill(new Ellipse2D.Double(Cnextx,Cnexty,5,5)); g2.drawLine((int) point6.getX(), (int) point6.getY(), (int) Cnextx, (int) Cnexty); //Line2D line = new Line2D.Double(point5.getX(), point5.getY(), Cnextx, Cnexty); //g2.draw(line); point6.x= (int) Cnextx; point6.y = (int) Cnexty; dots6.add(point6); } } } // end of switch } // end of JPanelUpdate public int PosXConversion(double pos) { return (int) (70 + (float) (((pos-HStart)/HLabelUnit))*HUnit); } public int PosYConversion(double pos) { return (int) ((p.getHeight()-35)- ((pos-VStart)/VLabelUnit)*VUnit); } public void Set_PointI(int num) { switch (num) { case 1: point1 = null; break; case 2: point2 = null; break; case 3: point3 = null; break; case 4: point4 = null; break; case 5: point5 = null; break; case 6: point6 = null; } } }