2013-12-20 6 views
0

У меня динамическая диаграмма области jfreechart, и я хочу добавить горизонтальную полосу прокрутки, которая показывает мне старые значения, отображаемые в моей диаграмме, потому что моя диаграмма показывает только значения последних 10 секунд моего таймер. Как это сделать? Я работаю с примером shown here.Динамическая диаграмма JFreechart с горизонтальной полосой прокрутки

public class essaijfree2 extends ApplicationFrame { 

private static final String TITLE = "Dynamic Series"; 
private static final String START = "Start"; 
private static final String STOP = "Stop"; 
private static final float MINMAX = 100; 
private static final int COUNT = 2 * 60; 
private static final int FAST = 100; 
private static final int SLOW = FAST * 5; 
private static final Random random = new Random(); 
private Timer timer; 

public essaijfree2(final String title) { 
    super(title); 
    final DynamicTimeSeriesCollection dataset = 
     new DynamicTimeSeriesCollection(1, COUNT, new Second()); 
    dataset.setTimeBase(new Second(0, 0, 0, 1, 1, 2011)); 
    dataset.addSeries(gaussianData(), 0, "Gaussian data"); 
    JFreeChart chart = createChart(dataset); 
    XYPlot xyPlot = (XYPlot) chart.getPlot(); 
    XYDifferenceRenderer r = new XYDifferenceRenderer(Color.green,Color.red, true); 
    xyPlot.setRenderer(r); 



    final JComboBox combo = new JComboBox(); 
    combo.addItem("Fast"); 
    combo.addItem("Slow"); 
    combo.addActionListener(new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      if ("Fast".equals(combo.getSelectedItem())) { 
       timer.setDelay(FAST); 
      } else { 
       timer.setDelay(SLOW); 
      } 
     } 
    }); 

    this.add(new ChartPanel(chart), BorderLayout.CENTER); 
    JPanel btnPanel = new JPanel(new FlowLayout()); 

    btnPanel.add(combo); 
    this.add(btnPanel, BorderLayout.SOUTH); 

    timer = new Timer(FAST, new ActionListener() { 

     float[] newData = new float[1]; 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      newData[0] = randomValue(); 
      dataset.advanceTime(); 
      dataset.appendData(newData); 
     } 
    }); 
} 

private float randomValue() { 

    return (float) (random.nextGaussian() * MINMAX/3); 
} 

private float[] gaussianData() { 
    float[] a = new float[COUNT]; 
    for (int i = 0; i < a.length; i++) { 
     a[i] = randomValue(); 
    } 
    return a; 
} 

private JFreeChart createChart(final XYDataset dataset) { 
    final JFreeChart result = ChartFactory.createXYAreaChart(
     TITLE, "hh:mm:ss", "milliVolts", dataset,PlotOrientation.VERTICAL, true, true, false); 
    final XYPlot plot = result.getXYPlot(); 
    ValueAxis domain = plot.getDomainAxis(); 
    domain.setAutoRange(true); 

    ValueAxis range = plot.getRangeAxis(); 
    range.setRange(-MINMAX, MINMAX); 
    return result; 
} 

public void start() { 
    timer.start(); 
} 

public static void main(final String[] args) { 
    EventQueue.invokeLater(new Runnable() { 

     @Override 
     public void run() { 
      essaijfree2 demo = new essaijfree2(TITLE); 
      demo.pack(); 
      RefineryUtilities.centerFrameOnScreen(demo); 
      demo.setVisible(true); 
      demo.start(); 
     } 
    }); 
} 

ответ

1

Я не думаю, что вы будете в состоянии сделать это с помощью DynamicTimeSeriesCollection как вы указать число точек данных, чтобы, в случае Youre COUNT = 2* 60.

Вы можете быть в состоянии использовать TimeSeriesCollection

+0

Но 'TimeSeriesCollection' не позволяет мне показывать только последние 10 секунд, но он показывает все значение, отображаемое –

+0

Thats проблемы, вы хотите, чтобы добавить полосу прокрутки, чтобы показать исторические данные на «Серию», ограниченную 120 записями. В этом случае вы будете влиять на производительность по мере добавления дополнительных данных. Я бы подумал о добавлении второго графика, чтобы показать исторические данные, используя ['SamplingXYLineRenderer'] (http://www.jfree.org/phpBB2/viewtopic.php?p=72854#72854) – GrahamA

+0

. Я поставлю кнопку на моя панель при нажатии Я пытаюсь сделать еще один график со всеми данными, появляющимися на месте старого графика. Я надеюсь, что это возможно –

Смежные вопросы