最近因为项目需要,要在Applet中动态显示处理器利用率的曲线图。下面这个例子就是使用Jfreechart在Applet中动态显示曲线图的例子:
在这个例子中使用了两条曲线,请看效果图:
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;
}