假设有2个Vectore v1,v2,分别储存的是两个队伍team1,team2的比分.比如:
v1 v2
10 10
11 15
15 15
16 15
. .
. .
. .
每30秒加入一个新的比分.根据这些值,来用JFreeChart做一个曲线图,一个直方图.两个队伍用不同颜色表示.
假设v的值为
网上找了好久都没找到合适的例子,我刚刚接触JFreeChart,所以没有思路啊~-_-,散尽所有分数
x轴为时间,y轴为比分.希望能给一下可以运行的代码,谢谢!!!!!!!
或者能提供类似的例子也可以,谢谢!!!!!!!我晕,为啥我只能给100分?不好意思,只能这么多....
你搜索的时候不要加swing关键字,大部分人都是在web环境下使用的
不过api是一样的,很简单,不过我现在手头没demo
超简单就是了,你在重搜下
JFreeChart 折线图
JFreeChart 曲线图
时间所限,写得匆忙,不完善之处,敬请见谅!参考代码:package swing;import java.awt.*;
import java.awt.event.*;
import java.awt.geom.Rectangle2D;
import java.util.*;import javax.swing.*;
import javax.swing.Timer;import org.jfree.chart.*;
import org.jfree.chart.axis.*;
import org.jfree.chart.labels.StandardCategoryToolTipGenerator;
import org.jfree.chart.plot.*;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.data.category.*;public class DynaChartPanel extends JPanel implements ActionListener {
private Vector<Integer> v1 = new Vector<Integer>();
private Vector<Integer> v2 = new Vector<Integer>();
private Vector<Integer> times = new Vector<Integer>();
private String[] rowKeys = { "Team1", "Team2" };
private Timer timer;
private int second = 0;
private int s1 = 0, s2 = 0;
private Random rnd = new Random();
private int width = 90;
private final int height = 610;
public DynaChartPanel()
{
times.add(second);
v1.add(s1);
v2.add(s2);
//
setPreferredSize(new Dimension(width, height));
}
public void start()
{
timer = new Timer(3000, this); //测试代码,3秒一次,可改为30000(秒)
timer.start();
}
public void stop()
{
if(timer!=null&&timer.isRunning())
timer.stop();
}
public CategoryDataset getCategoryDataset()
{
Integer[] t = new Integer[0];
Number[][] data = new Integer[][]{
v1.toArray(t),
v2.toArray(t)
};
DefaultCategoryDataset result = new DefaultCategoryDataset();
for (int r = 0; r < data.length; r++) {
for (int c = 0; c < data[r].length; c++) {
result.addValue(data[r][c], rowKeys[r], times.get(c));
}
}
return result;
}
public void paintComponent(Graphics g)
{
Dimension size = new Dimension( width, height);
setPreferredSize(size);
//
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
//
CategoryDataset dataset = getCategoryDataset();
//以下10来行代码亦可由ChartFactory.createLineChart()完成
CategoryAxis categoryAxis = new CategoryAxis("时间(秒)");
ValueAxis valueAxis = new NumberAxis("比分");
LineAndShapeRenderer renderer = new LineAndShapeRenderer(true, false);
renderer.setBaseToolTipGenerator(
new StandardCategoryToolTipGenerator());
CategoryPlot plot = new CategoryPlot(dataset, categoryAxis, valueAxis,
renderer);
plot.setOrientation(PlotOrientation.VERTICAL);
JFreeChart chart = new JFreeChart("折线图", JFreeChart.DEFAULT_TITLE_FONT,
plot, true);
//
Rectangle2D area1 = new Rectangle(0, 0, width, 300);
chart.draw(g2, area1);
//
chart = ChartFactory.createBarChart("直方图", "时间(秒)", "比分", dataset, PlotOrientation.VERTICAL, true, true, false);
Rectangle2D area2 = new Rectangle(0, 300, width, 300);
chart.draw(g2, area2);
} public void actionPerformed(ActionEvent e) {
String message = "输入格式为“v1,v2”,比如“11,12”:";
while(true)
{
//每次加1到3,方便演示之用
s1 += rnd.nextInt(3) + 1; s2+= rnd.nextInt(3) + 1;
//使用注释部分代码可以达到手动输入两队比分的目的
String input = s1 + "," + s2;//JOptionPane.showInputDialog( message, s1 + "," + s2);
try
{
String[] score = input.split(",");
s1 = Integer.parseInt(score[0]);
s2 = Integer.parseInt(score[1]);
second += 30;
v1.add(s1);
v2.add(s2);
times.add(second);
//
width += 30;
repaint();
//
break;
}catch(Exception ex)
{
message = "输入无效!请重输!\n输入格式为“v1,v2”,比如“11,12”:";
}
}
}
public static void main(String[] args) {
JFrame frm = new JFrame();
frm.setTitle("动态的折线图与直方图");
frm.setSize(600, 650);
DynaChartPanel pnlMain = new DynaChartPanel();
frm.getContentPane().add(new JScrollPane(pnlMain));
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frm.setVisible(true);
pnlMain.start();
}
}运行效果:
accp206回答问题很用心啊。
正好对jfreechart不怎么在行
收藏了接触下
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.data.general.DefaultPieDataset;
public class JFreeChartTest {
public static void main(String[] args) {
DefaultPieDataset dpd = new DefaultPieDataset();
dpd.setValue("管理人员", 25);
dpd.setValue("市场人员", 25);
dpd.setValue("开发人员", 45);
dpd.setValue("其他人员", 10);
JFreeChart chart = ChartFactory.createPieChart3D("某公司人员组织结构图", dpd,
true, true, false);
ChartFrame chartFrame = new ChartFrame("某公司人员组织结构图", chart);
chartFrame.pack();
chartFrame.setVisible(true);
}
}
效果如下,当然要加入jcommon-1.0.12.jar和jfreechart-1.0.9.jar两个包,如果下这两个包的话可以到
http://download.csdn.net/source/668069 去下了
试试运行效果
结贴了。
非常感谢,代码非常非常的棒!
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(10.0, "S1", "C1");
dataset.addValue(4.0, "S1", "C2");
dataset.addValue(15.0, "S1", "C3");
dataset.addValue(14.0, "S1", "C4");
dataset.addValue(-5.0, "S2", "C1");
dataset.addValue(-7.0, "S2", "C2");
dataset.addValue(14.0, "S2", "C3");
dataset.addValue(-3.0, "S2", "C4");
dataset.addValue(6.0, "S3", "C1");
dataset.addValue(17.0, "S3", "C2");
dataset.addValue(-12.0, "S3", "C3");
dataset.addValue(7.0, "S3", "C4");
dataset.addValue(7.0, "S4", "C1");
dataset.addValue(15.0, "S4", "C2");
dataset.addValue(11.0, "S4", "C3");
dataset.addValue(0.0, "S4", "C4");
dataset.addValue(-8.0, "S5", "C1");
dataset.addValue(-6.0, "S5", "C2");
dataset.addValue(10.0, "S5", "C3");
dataset.addValue(-9.0, "S5", "C4");
dataset.addValue(9.0, "S6", "C1");
dataset.addValue(8.0, "S6", "C2");
dataset.addValue(null, "S6", "C3");
dataset.addValue(6.0, "S6", "C4");
dataset.addValue(-10.0, "S7", "C1");
dataset.addValue(9.0, "S7", "C2");
dataset.addValue(7.0, "S7", "C3");
dataset.addValue(7.0, "S7", "C4");
dataset.addValue(11.0, "S8", "C1");
dataset.addValue(13.0, "S8", "C2");
dataset.addValue(9.0, "S8", "C3");
dataset.addValue(9.0, "S8", "C4");
dataset.addValue(-3.0, "S9", "C1");
dataset.addValue(7.0, "S9", "C2");
dataset.addValue(11.0, "S9", "C3");
dataset.addValue(-10.0, "S9", "C4");
JFreeChart chart = ChartFactory.createBarChart3D("Bar Chart",
"Category", "Value", dataset, PlotOrientation.VERTICAL, true,
true, false);
return chart;
}