假设有2个Vectore v1,v2,分别储存的是两个队伍team1,team2的比分.比如:
v1     v2
10     10
11     15
15     15
16     15
.      .
.      .
.      .
每30秒加入一个新的比分.根据这些值,来用JFreeChart做一个曲线图,一个直方图.两个队伍用不同颜色表示.
假设v的值为
网上找了好久都没找到合适的例子,我刚刚接触JFreeChart,所以没有思路啊~-_-,散尽所有分数
x轴为时间,y轴为比分.希望能给一下可以运行的代码,谢谢!!!!!!!
或者能提供类似的例子也可以,谢谢!!!!!!!我晕,为啥我只能给100分?不好意思,只能这么多....

解决方案 »

  1.   

    网上到处都是你怎么能说没有呢,
    你搜索的时候不要加swing关键字,大部分人都是在web环境下使用的
    不过api是一样的,很简单,不过我现在手头没demo
    超简单就是了,你在重搜下
    JFreeChart 折线图
    JFreeChart 曲线图
      

  2.   

    不如以下代码,可否对楼主有所帮助?
    时间所限,写得匆忙,不完善之处,敬请见谅!参考代码: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();
    }
    }运行效果:
      

  3.   

    很好很强大,呵呵。
    accp206回答问题很用心啊。
      

  4.   

    很强大
    正好对jfreechart不怎么在行
    收藏了接触下
      

  5.   

    偶这里有个是饼状图的例子,可能比较简单,更容易理解一些
    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 去下了
    试试运行效果
      

  6.   

    谢谢accp206,也谢谢sunyujia。
    结贴了。
    非常感谢,代码非常非常的棒!
      

  7.   

     up   up  
      

  8.   

     private JFreeChart createBarChart() {
    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;
    }