最近因为项目需要,要在Applet中动态显示处理器利用率的曲线图。下面这个例子就是使用Jfreechart在Applet中动态显示曲线图的例子:
在这个例子中使用了两条曲线,请看效果图:
程序很简单,只是简单的将Jfreechart在Application上的曲线图的Demo转到Applet的上,代码如下:
package
com.sundy.applet;


/** */
/**
*
* TODO 使用Jfreechart 在applet中画动态曲线图
*
* @author 刘正伟(sundy)
* @see mailto:sundy26@126.com
* @version 1.0
* @since 2005-6-22
*
* 修改记录:
* 日期 修改人 描述
* -----------------------------------------------------------------------
*/


/** */
/**
* @author sundy
*
*/

import
java.awt.
*
;
import
java.awt.event.ActionEvent;
import
java.awt.event.ActionListener;
import
javax.swing.JApplet;
import
javax.swing.Timer;

import
org.jfree.chart.ChartPanel;
import
org.jfree.chart.JFreeChart;
import
org.jfree.chart.axis.DateAxis;
import
org.jfree.chart.axis.NumberAxis;
import
org.jfree.chart.plot.XYPlot;
import
org.jfree.chart.ChartFactory;
import
org.jfree.chart.axis.ValueAxis;

import
org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import
org.jfree.data.time.
*
;


public
class
CpuUsage
extends
JApplet
...
{
private static final long serialVersionUID = 3257566209007171634L;

private double lastValue1;

private double lastValue2;


class DataGenerator extends Timer implements ActionListener ...{
private static final long serialVersionUID = 3977867288743720504L;


public void actionPerformed(ActionEvent actionevent) ...{

double d1 = 0.90000000000000002D + 0.20000000000000001D * Math
.random();
lastValue1 = lastValue1 * d1;

double d2 = 0.90000000000000002D + 0.20000000000000001D * Math
.random();
lastValue2 = lastValue2 * d2;

addTotalObservation(lastValue1);
addFreeObservation(lastValue2);
}


DataGenerator() ...{
super(100, null);
addActionListener(this);
}
}


public CpuUsage() ...{
lastValue1 = 100D;
lastValue2 = 100D;

total = new TimeSeries("Cpu00", org.jfree.data.time.Millisecond.class);
//total.setHistoryCount(30000);
free = new TimeSeries("Cpu01", org.jfree.data.time.Millisecond.class);
//free.setHistoryCount(30000);

TimeSeriesCollection timeseriescollection = new TimeSeriesCollection();
timeseriescollection.addSeries(total);
timeseriescollection.addSeries(free);
BasicStroke basicstroke = new BasicStroke(2.0F, 0, 2);

DateAxis horizontaldateaxis = new DateAxis("Time");
NumberAxis verticalnumberaxis = new NumberAxis("Value");

XYLineAndShapeRenderer xylineandshaperenderer = new XYLineAndShapeRenderer(
true, false);

xylineandshaperenderer.setSeriesPaint(0, Color.red);
xylineandshaperenderer.setSeriesPaint(1, Color.green);
xylineandshaperenderer.setStroke(new BasicStroke(3F, 0, 2));

JFreeChart jfreechart = ChartFactory.createTimeSeriesChart(
"处理器利用率", "Time", "Value", timeseriescollection,
true, true, false);

XYPlot xyplot = jfreechart.getXYPlot();
ValueAxis valueaxis = xyplot.getDomainAxis();
valueaxis.setAutoRange(true);
valueaxis.setFixedAutoRange(60000D);
valueaxis = xyplot.getRangeAxis();
valueaxis.setRange(0.0D, 200D);

ChartPanel chartpanel = new ChartPanel(jfreechart);
chartpanel.setPopupMenu(null);
getContentPane().add(chartpanel);
(new DataGenerator()).start();
}


private void addTotalObservation(double d) ...{

total.add(new Millisecond(), d);
}


private void addFreeObservation(double d) ...{
free.add(new Millisecond(), d);
}

private TimeSeries total;

private TimeSeries free;

}