一般的柱状图,都是不是动态的,只是简单的生成一个柱状图片就OK了,在这个例子中,将实现柱行的动态显示。
它和使用Jfreechart显示静态的柱状图,没有什么不一样,注意到代码中,这一段:
CategoryPlot p
=
jfreechart.getCategoryPlot();
//
设置新的数据集
jfreechart.getCategoryPlot().setDataset(createDataset());;
//
通知Jfreechart 数据发生了改变,重新绘制柱状图

if
(jfreechart
!=
null
)
{
jfreechart.fireChartChanged();
}
这段代码,先获取一些新的数据集,然后调用CategoryPlot中的SetDataset方法来设置chart的数据集,最后调用chart中的firechartchanged方法,来通知chart刷新视图。运行一下,呵呵,怎么样,很酷吧。
完整的代码如下:
/**/
/**
*
* TODO 使用Jfreechart 在applet中画动态柱图
*
* @author 刘正伟(sundy)
* @see mailto:sundy26@126.com
* @version 1.0
* @since 2005-6-22
*
* 修改记录:
* 日期 修改人 描述
* -----------------------------------------------------------------------
*/
package com.sundy.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.
*
;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.data.category.CategoryDataset;

import org.jfree.chart.axis.NumberAxis;
import org.jfree.data.category.DefaultCategoryDataset;


public
class
BarCpuUsage extends JApplet
{
JFreeChart jfreechart;


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


public void actionPerformed(ActionEvent actionevent)
{

addTotalObservation();

}


DataGenerator()
{
super(1000, null);
addActionListener(this);
}
}


private void addTotalObservation()
{
CategoryPlot p = jfreechart.getCategoryPlot();
//设置新的数据集
jfreechart.getCategoryPlot().setDataset(createDataset());;
//通知Jfreechart 数据发生了改变,重新绘制柱状图

if (jfreechart != null)
{
jfreechart.fireChartChanged();
}
}


private static CategoryDataset createDataset()
{
DefaultCategoryDataset defaultcategorydataset = new DefaultCategoryDataset();
String s = "System";
String s1 = "Nice";
String s2 = "User";
String s3 = "Total";
String s4 = "Cpu01";
String s5 = "Cpu02";
String s6 = "Cpu03";
String s7 = "Cpu04";
double d1 = (float)(10D * Math.random());
double d2 = (float)(10D * Math.random());
double d3 = (float)(10D * Math.random());
double d4 = (float)(10D * Math.random());
defaultcategorydataset.addValue(d1, s, s3);
defaultcategorydataset.addValue(d2, s, s4);
defaultcategorydataset.addValue(d3, s, s5);
defaultcategorydataset.addValue(d4, s, s6);
defaultcategorydataset.addValue(5D, s, s7);
defaultcategorydataset.addValue(5D, s1, s3);
defaultcategorydataset.addValue(7D, s1, s4);
defaultcategorydataset.addValue(6D, s1, s5);
defaultcategorydataset.addValue(8D, s1, s6);
defaultcategorydataset.addValue(4D, s1, s7);
defaultcategorydataset.addValue(4D, s2, s3);
defaultcategorydataset.addValue(3D, s2, s4);
defaultcategorydataset.addValue(2D, s2, s5);
defaultcategorydataset.addValue(3D, s2, s6);
defaultcategorydataset.addValue(6D, s2, s7);
return defaultcategorydataset;
}


public void init()
{
CategoryDataset categorydataset = createDataset();
jfreechart = ChartFactory.createBarChart("处理器利用率",
"节点名称", "Value", categorydataset, PlotOrientation.VERTICAL,
true, true, false);
jfreechart.setBackgroundPaint(Color.white);
CategoryPlot categoryplot = jfreechart.getCategoryPlot();
categoryplot.setBackgroundPaint(Color.lightGray);
categoryplot.setDomainGridlinePaint(Color.white);
categoryplot.setDomainGridlinesVisible(true);
categoryplot.setRangeGridlinePaint(Color.white);
NumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis();
numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
BarRenderer barrenderer = (BarRenderer) categoryplot.getRenderer();
barrenderer.setDrawBarOutline(false);
GradientPaint gradientpaint = new GradientPaint(0.0F, 0.0F, Color.blue,
0.0F, 0.0F, new Color(0, 0, 64));
GradientPaint gradientpaint1 = new GradientPaint(0.0F, 0.0F,
Color.green, 0.0F, 0.0F, new Color(0, 64, 0));
GradientPaint gradientpaint2 = new GradientPaint(0.0F, 0.0F, Color.red,
0.0F, 0.0F, new Color(164, 166, 0));
barrenderer.setSeriesPaint(0, gradientpaint);
barrenderer.setSeriesPaint(1, gradientpaint1);
barrenderer.setSeriesPaint(2, gradientpaint2);
barrenderer.setItemMargin(0.05);
CategoryAxis categoryaxis = categoryplot.getDomainAxis();
categoryaxis.setCategoryLabelPositions(CategoryLabelPositions
.createUpRotationLabelPositions(0.52359877559829882D));

ChartPanel chartpanel = new ChartPanel(jfreechart, false);
chartpanel.setPreferredSize(new Dimension(500, 270));

getContentPane().add(chartpanel);
(new DataGenerator()).start();

}

public void paint(Graphics g)
{


if (jfreechart != null)
{
jfreechart.draw((Graphics2D) g, getBounds());
}
}


public void destroy()
{
}
}