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);//设置主题 ......
这段代码主要目的是对统计图表进行自体相关的设置,如果你图表中包含中文而又忘记了进行这些设置,那么你的中文也许无法显示哦。