最近因为项目需要,要在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;
}
/** */ /**
*
* 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;
}