1 22 package info.monitorenter.gui.chart.demos; 23 24 import info.monitorenter.gui.chart.Chart2D; 25 import info.monitorenter.gui.chart.ITrace2D; 26 import info.monitorenter.gui.chart.layout.ChartPanel; 27 import info.monitorenter.gui.chart.rangepolicies.RangePolicyMinimumViewport; 28 import info.monitorenter.gui.chart.traces.Trace2DSimple; 29 import info.monitorenter.util.Range; 30 31 import java.awt.BorderLayout ; 32 import java.awt.Color ; 33 import java.awt.Container ; 34 import java.awt.event.WindowAdapter ; 35 import java.awt.event.WindowEvent ; 36 37 import javax.swing.JFrame ; 38 39 40 59 60 public final class MultiTracing extends JFrame { 61 72 static final class AddPaintRemoveThread extends Thread { 73 74 75 private double[] m_data; 76 77 78 private Chart2D m_innnerChart; 79 80 81 private long m_sleep; 82 83 84 private ITrace2D m_trace; 85 86 103 public AddPaintRemoveThread(final Chart2D chart, final ITrace2D trace, final double[] data, 104 final long sleep) { 105 this.m_innnerChart = chart; 106 this.m_trace = trace; 107 this.m_trace.setName(this.getName()); 108 this.m_data = data; 109 this.m_sleep = sleep; 110 } 111 112 115 public void run() { 116 117 while (true) { 118 119 this.m_innnerChart.addTrace(this.m_trace); 120 for (int i = 0; i < this.m_data.length; i++) { 121 if (DEBUG) { 122 System.out.println(this.getName() + " adding point to " + this.m_trace.getName()); 123 } 124 this.m_trace.addPoint(i, this.m_data[i]); 125 try { 126 Thread.sleep(this.m_sleep); 127 } catch (InterruptedException e) { 128 e.printStackTrace(System.err); 129 } 130 131 } 132 try { 133 Thread.sleep((long) (Math.random() * this.m_sleep)); 134 } catch (InterruptedException e) { 135 e.printStackTrace(System.err); 136 } 137 if (DEBUG) { 138 System.out.println(this.getName() + " removing trace."); 139 } 140 this.m_innnerChart.removeTrace(this.m_trace); 141 this.m_trace.removeAllPoints(); 142 143 try { 144 Thread.sleep((long) (Math.random() * this.m_sleep)); 145 } catch (InterruptedException e) { 146 e.printStackTrace(System.err); 147 } 148 } 149 } 150 } 151 152 153 private static final boolean DEBUG = false; 154 155 158 private static final long serialVersionUID = 3256722879394820657L; 159 160 161 private static final int SLEEP = 100; 162 163 172 private static Range getRange(final double[][] data) { 173 double min = Double.MAX_VALUE; 174 double max = Double.MIN_VALUE; 175 double tmp; 176 for (int i = data.length - 1; i >= 0; i--) { 177 for (int j = data[i].length - 1; j >= 0; j--) { 178 tmp = data[i][j]; 179 if (tmp > max) { 180 max = tmp; 181 } 182 if (tmp < min) { 183 min = tmp; 184 } 185 } 186 } 187 188 return new Range(min, max); 189 } 190 191 198 public static void main(final String [] args) { 199 202 final double[][] data = new double[6][200]; 203 final java.util.Random rand = new java.util.Random (); 204 data[0][0] = rand.nextDouble() * 5; 207 for (int i = 1; i < data[0].length; i++) { 208 data[0][i] = (rand.nextDouble() < 0.5) ? data[0][i - 1] + rand.nextDouble() * 5 209 : data[0][i - 1] - rand.nextDouble() * 5; 210 } 211 double tmp; 213 for (int i = 0; i < data[0].length; i++) { 214 tmp = Math.pow(Math.E, ((double) i) / 40) + (Math.random() < 0.5 ? data[0][i] : -data[0][i]); 215 data[1][i] = tmp; 216 } 217 for (int i = 0; i < data[0].length; i++) { 219 data[2][i] = Math.pow(Math.cos(((double) i) / 10) * 5, 2); 220 } 221 data[3][0] = data[0][0]; 224 tmp = 0; 225 for (int i = 1; i < data[0].length; i++) { 226 for (int j = Math.max(0, i - 10); j <= i; j++) { 227 tmp += data[0][j]; 228 } 229 data[3][i] = tmp / (((double) i) + 1); 230 tmp = 0; 231 } 232 for (int i = 0; i < data[0].length; i++) { 234 data[4][i] = data[1][i] + data[2][i] * (0.1 * -data[0][i]); 235 } 236 for (int i = 0; i < data[0].length; i++) { 238 data[5][i] = data[0][i] + data[2][i]; 239 } 240 241 final MultiTracing wnd = new MultiTracing(); 242 wnd.setForceXRange(new Range(0, data[0].length + 10)); 243 wnd.setForceYRange(getRange(data)); 244 wnd.setLocation(100, 300); 245 wnd.setSize(800, 300); 246 wnd.setResizable(true); 247 wnd.setVisible(true); 248 249 ITrace2D trace; 250 trace = new Trace2DSimple(); 252 trace.setColor(Color.red); 253 new AddPaintRemoveThread(wnd.m_chart, trace, data[0], MultiTracing.SLEEP).start(); 254 trace = new Trace2DSimple(); 256 trace.setColor(Color.green); 257 new AddPaintRemoveThread(wnd.m_chart, trace, data[1], (long) (MultiTracing.SLEEP * 1.5)) 258 .start(); 259 trace = new Trace2DSimple(); 261 trace.setColor(Color.blue); 262 new AddPaintRemoveThread(wnd.m_chart, trace, data[2], (long) (MultiTracing.SLEEP * 2)).start(); 263 264 trace = new Trace2DSimple(); 266 trace.setColor(Color.cyan); 267 new AddPaintRemoveThread(wnd.m_chart, trace, data[3], (long) (MultiTracing.SLEEP * 2.5)) 268 .start(); 269 trace = new Trace2DSimple(); 271 trace.setColor(Color.black); 272 new AddPaintRemoveThread(wnd.m_chart, trace, data[4], (long) (MultiTracing.SLEEP * 3)).start(); 273 trace = new Trace2DSimple(); 275 trace.setColor(Color.white); 276 new AddPaintRemoveThread(wnd.m_chart, trace, data[5], (long) (MultiTracing.SLEEP * 3.5)) 277 .start(); 278 279 } 280 281 282 protected Chart2D m_chart = null; 283 284 285 public MultiTracing() { 286 super("MultiTracing"); 287 this.m_chart = new Chart2D(); 288 this.m_chart.getAxisX().setPaintGrid(true); 289 this.m_chart.getAxisY().setPaintGrid(true); 290 this.m_chart.setBackground(Color.lightGray); 291 this.m_chart.setGridColor(new Color (0xDD, 0xDD, 0xDD)); 292 addWindowListener(new WindowAdapter () { 294 public void windowClosing(final WindowEvent e) { 295 System.exit(0); 296 } 297 }); 298 Container contentPane = getContentPane(); 299 contentPane.setLayout(new BorderLayout ()); 300 contentPane.add(new ChartPanel(this.m_chart), BorderLayout.CENTER); 301 } 302 303 311 public void setForceXRange(final Range forceXRange) { 312 this.m_chart.getAxisX().setRangePolicy(new RangePolicyMinimumViewport(forceXRange)); 313 } 314 315 323 public void setForceYRange(final Range forceYRange) { 324 this.m_chart.getAxisY().setRangePolicy(new RangePolicyMinimumViewport(forceYRange)); 325 } 326 } 327 | Popular Tags |