|
簡単なサンプルですが 細かい変数は目をつぶってください。 スレッドにてClear->add->再描画の繰り返しで行ってます。
// Seriesにデータを追加処理部分 // グラフをリフレッシュ xy_Series[i_Loop][0].clear();
for(int i_PlotLoop = 0 ; i_PlotLoop < i_MaxCap ; i_PlotLoop++){
// plotする位置を算出 i_xPlotPos = i_Max - (i_MaxCap - i_PlotLoop); // 取得位置からインクリメント i_GetPosCacu = i_GetPos + i_PlotLoop;
//i_GetPosCacuが121以上になったら0にする if(i_GetPosCacu >= i_MaxCap){ i_GetPosCacu = i_GetPosCacu - i_MaxCap; }
xy_Series[i_Loop][0].add(i_xPlotPos, i_recieve); xy_Series[i_Loop][1].add(i_xPlotPos, 0); } }
//グラフ表示部分
public BufferedImage v_Chart_SeriesCollection() {
JFreeChart chart = ChartFactory.createXYLineChart("表示", "時間[sec]","受信状態",t_plot_data,PlotOrientation.VERTICAL, true, true, false // Show legend );
XYPlot plot = (XYPlot)chart.getPlot();
// 軸の間隔をINT型であらわす NumberAxis rangeAxis = (NumberAxis)plot.getRangeAxis(); rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits()); rangeAxis.setAutoRangeIncludesZero(true);
/* 横軸の設定 */ ValueAxis xAxis = plot.getDomainAxis(); xAxis.setAutoRange(false); xAxis.setRange(0,DataBase.i_xMaxPlot); plot.setDomainGridlinePaint(DataBase.cl_Line); plot.setDomainGridlinesVisible(true);
//横軸の目盛り間隔の設定 TickUnits tickUnits = new TickUnits(); TickUnit unit = new NumberTickUnit(10); tickUnits.add(unit); xAxis.setStandardTickUnits(tickUnits); xAxis.setTickLabelsVisible(false); // メモリ値を隠す
// plot.setAxisOffset(new RectangleInsets(5,5,5,5));
/* 縦軸の設定 */ ValueAxis yAxis = plot.getRangeAxis(); yAxis.setAutoRange(false); yAxis.setRange(0, DataBase.i_yMaxPlot);
//背景色の設定 plot.setRangeGridlinePaint(DataBase.cl_Line); plot.setBackgroundPaint(DataBase.cl_back);
// 凡例背景の設定 chart.getLegend(); chart.getLegend().setBackgroundPaint(ChartColor.lightGray); chart.getLegend().setItemPaint(ChartColor.BLACK);
//レンダラの初期化 DataBase.xy_renderer = (XYLineAndShapeRenderer)plot.getRenderer(); for(int i_Loop = 0 ; i_Loop < 2 ; i_Loop++){ DataBase.xy_renderer.setSeriesPaint(i_Loop*2,DataBase.cls_SystemData[i_Loop].cl_Line_org); DataBase.xy_renderer.setSeriesPaint(i_Loop*2+1,DataBase.cls_SystemData[i_Loop].cl_Line_rpt); //データポイントにプロットする DataBase.xy_renderer.setSeriesShapesVisible(i_Loop*2,true); // マーキング DataBase.xy_renderer.setSeriesShapesVisible(i_Loop*2+1,true);// マーキング }
//チャートサイズ image = chart.createBufferedImage(850,190); }
//スレッドで実行している部分です public void run(){
while(!b_run_stop){
try {
// false:falseなら実行 if (!b_run_suspend && !b_run_stop) {
Seriesにデータを追加部分処理
//描画 mainframe.jp_moni.revalidate(); mainframe.jp_moni.updateUI(); }
// SLEEP Thread.sleep(DataBase.l_sleep);
synchronized (this) { while (b_run_suspend && !b_run_stop) { wait(); } } } }
|