2012-03-30 18:47:46|?次阅读|上传:wustguangh【已有?条评论】发表评论
关键词:Java, Swing, 界面设计|来源:唯设编程网
FreeChart截止2011年2月22日为止的相当不错的java图形解决方案,基本能够解决目前的图形方面的需求。Java使用JFreeChart绘制柱形图介绍了使用JFreeChart绘制柱形图的方法,本文将介绍JFreeChart绘制另一种样式的柱形图,方法与Java使用JFreeChart绘制柱形图类似。首先给出程序的运行效果:

Java代码:
package Test.JFreeChar;
import java.awt.Component;
import java.awt.Font;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.swing.JFrame;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.StandardChartTheme;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.general.DatasetUtilities;
//JFreeChart Bar Chart(柱状图)
public class CreateJFreeChartBar extends JFrame{
private static final long serialVersionUID = 1L;
CreateJFreeChartBar(){
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setTitle("简单柱状图");
this.add(CreateMainPanel());
this.pack();
this.setVisible(true);
}
private Component CreateMainPanel() {
CategoryDataset dataset = createDataset();
JFreeChart chart=createChart(dataset);
return new ChartPanel(chart);
}
/**
* 创建JFreeChart Bar Chart(柱状图)
*/
public static void main(String[] args) {
//步骤1:创建CategoryDataset对象(准备数据)
CategoryDataset dataset = createDataset();
//步骤2:根据Dataset 生成JFreeChart对象,以及做相应的设置
JFreeChart freeChart = createChart(dataset);
//步骤3:将JFreeChart对象输出到文件,Servlet输出流等
saveAsFile(freeChart, "c:jfreechartar.png", 500, 400);
new CreateJFreeChartBar();
}
//保存为文件
public static void saveAsFile(JFreeChart chart, String outputPath, int weight, int height) {
FileOutputStream out = null;
try {
File outFile = new File(outputPath);
if (!outFile.getParentFile().exists()) {
outFile.getParentFile().mkdirs();
}
out = new FileOutputStream(outputPath);
//保存为PNG文件
ChartUtilities.writeChartAsPNG(out, chart, 300, 200);
//保存为JPEG文件
//ChartUtilities.writeChartAsJPEG(out, chart, 500, 400);
out.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (out != null) {
try {
out.close();
} catch (IOException e) {
//do nothing
}
}
}
}
//根据CategoryDataset生成JFreeChart对象
public static JFreeChart createChart(CategoryDataset categoryDataset) {
//这里的"name"参数;是什么意思我也不知道,反正这样可以用
StandardChartTheme standardChartTheme = new StandardChartTheme("name");
//可以改变轴向的字体
standardChartTheme.setLargeFont(new Font("楷体",Font.BOLD, 12));
//可以改变图例的字体
standardChartTheme.setRegularFont(new Font("宋体",Font.BOLD, 8));
//可以改变图标的标题字体
standardChartTheme.setExtraLargeFont(new Font("隶书",Font.BOLD, 20));
ChartFactory.setChartTheme(standardChartTheme);//设置主题
JFreeChart jfreechart = ChartFactory.createBarChart("Bar Chart Demo", //标题
"产品", //categoryAxisLabel (category轴,横轴,X轴的标签)
"数量", //valueAxisLabel(value轴,纵轴,Y轴的标签)
categoryDataset, // dataset
PlotOrientation.VERTICAL,
true, // legend
false, // tooltips
false); // URLs
//以下的设置可以由用户定制,也可以省略
CategoryPlot plot = (CategoryPlot) jfreechart.getPlot();
//背景色 透明度
plot.setBackgroundAlpha(0.5f);
//前景色 透明度
plot.setForegroundAlpha(0.5f);
//其它设置可以参考 CategoryPlot
return jfreechart;
}
/**
* 创建CategoryDataset对象
*
*/
public static CategoryDataset createDataset() {
String []rowKeys = {"One", "Two", "Three"};
String []colKeys = {"1987", "1997", "2007"};
double [][] data = {
{50, 20, 30},
{20, 10D, 40D},
{40, 30.0008D, 38.24D},
};
//也可以使用以下代码
//DefaultCategoryDataset categoryDataset = new DefaultCategoryDataset();
//categoryDataset.addValue(10, "rowKey", "colKey");
return DatasetUtilities.createCategoryDataset(rowKeys, colKeys, data);
}
}
至此,JFreeChart绘制柱状图的实例便完成了,在使用时,提醒读者需要注意的是下面这段代码:
//根据CategoryDataset生成JFreeChart对象
public static JFreeChart createChart(CategoryDataset categoryDataset) {
//这里的"name"参数;是什么意思我也不知道,反正这样可以用
StandardChartTheme standardChartTheme = new StandardChartTheme("name");
//可以改变轴向的字体
standardChartTheme.setLargeFont(new Font("楷体",Font.BOLD, 12));
//可以改变图例的字体
standardChartTheme.setRegularFont(new Font("宋体",Font.BOLD, 8));
//可以改变图标的标题字体
standardChartTheme.setExtraLargeFont(new Font("隶书",Font.BOLD, 20));
ChartFactory.setChartTheme(standardChartTheme);//设置主题
......
这段代码主要目的是对统计图表进行自体相关的设置,如果你图表中包含中文而又忘记了进行这些设置,那么你的中文也许无法显示哦。