本文链接:https://blog.csdn.net/cnds123321/article/details/89600693
目录链接:https://blog.csdn.net/cnds123321/article/details/89600379
9.1 测试数据
到目前为止,我们学习了如何使用静态数据的创建不同类型的JFreeChart API图表。但在生产环境中,数据被设置在文本文件的形式与一个预定义的格式,或者其直接来自数据库。
假设我们有一个txt文件,其中内容为:
张三,30 李四,25 王五,18 赵六,45
9.2 基于swing的应用
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
import javax.swing.*;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class Chart
{
public static void main( String[ ] args )throws Exception
{
String names[]={"张三","李四","王五","赵六"};
//创建数据集
DefaultCategoryDataset dataset=new DefaultCategoryDataset();
//给数据集添加数据
String[][] array=readString();
for(int i=0;i<array.length;i++){
dataset.setValue(Double.parseDouble(array[i][1]),"年龄",array[i][0]);
}
// 创建简单的条形图
JFreeChart freeChart= ChartFactory.createBarChart(
"数据信息",// 图表标题
"姓名",
"年龄",
dataset,//数据集,即要显示在图表上的数据
PlotOrientation.VERTICAL,
true,//是否显示图例
false,//是否显示提示
false//是否生成URL连接
);
//以面板显示,创建一个图表面板
ChartPanel chartPanel=new ChartPanel(freeChart);
//设置大小
chartPanel.setPreferredSize(new java.awt.Dimension(560,400));
//创建一个主窗口来显示面板
JFrame frame=new JFrame("条形图");
frame.setLocation(500,400);
frame.setSize(600,500);
//将图表面板设置为主窗口的内容面板
frame.setContentPane(chartPanel);
//显示主窗口
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
/**
* 按行读取字符串并通过逗号进行分割
* @return
*/
public static String[][] readString(){
ArrayList arrayList=new ArrayList();
try{
InputStreamReader isr=new InputStreamReader(new FileInputStream("c:/test.txt"),"gbk");
BufferedReader br=new BufferedReader(isr);
//按行读取字符串
String str;
while((str=br.readLine())!=null){
arrayList.add(str);
}
br.close();
isr.close();
}catch (IOException e){
e.printStackTrace();
}
//对arraylist中存储的字符串进行处理
int length=arrayList.size();
int width=arrayList.get(0).toString().split(",").length;
String array[][]=new String[length][width];
for(int i=0;i<length;i++){
for(int j=0;j<width;j++){
String s=arrayList.get(i).toString().split(",")[j];
array[i][j]=s;
}
}
return array;
}
}
结果展示:
9.3 创建图像
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
import java.io.*;
import java.util.ArrayList;
public class Chart
{
public static void main( String[ ] args )throws Exception
{
//创建数据集
DefaultCategoryDataset dataset=new DefaultCategoryDataset();
//给数据集添加数据
String[][] array=readString();
for(int i=0;i<array.length;i++){
dataset.setValue(Double.parseDouble(array[i][1]),"年龄",array[i][0]);
}
// 创建简单的条形图
JFreeChart freeChart= ChartFactory.createBarChart(
"数据信息",// 图表标题
"姓名",
"年龄",
dataset,//数据集,即要显示在图表上的数据
PlotOrientation.VERTICAL,
true,//是否显示图例
false,//是否显示提示
false//是否生成URL连接
);
//使用输出流输出图表文件
//输出JPG文件
OutputStream os=new FileOutputStream("c:/picture.jpg");
ChartUtilities.writeChartAsJPEG(os,freeChart,500,500);
//输出PNG文件
OutputStream os_png=new FileOutputStream("c:/pictrue_png.png");
ChartUtilities.writeChartAsPNG(os_png,freeChart,500,500);
}
/**
* 按行读取字符串并通过逗号进行分割
* @return
*/
public static String[][] readString(){
ArrayList arrayList=new ArrayList();
try{
InputStreamReader isr=new InputStreamReader(new FileInputStream("c:/test.txt"),"gbk");
BufferedReader br=new BufferedReader(isr);
//按行读取字符串
String str;
while((str=br.readLine())!=null){
arrayList.add(str);
}
br.close();
isr.close();
}catch (IOException e){
e.printStackTrace();
}
//对arraylist中存储的字符串进行处理
int length=arrayList.size();
int width=arrayList.get(0).toString().split(",").length;
String array[][]=new String[length][width];
for(int i=0;i<length;i++){
for(int j=0;j<width;j++){
String s=arrayList.get(i).toString().split(",")[j];
array[i][j]=s;
}
}
return array;
}
}
结果展示: