2013-12-11 31 views
0

我有一個動態的面積圖,我希望它從面板的中間顯示,這意味着我想從X軸的中間添加數據,但不是從圖表的權利。 我正在使用示例here。這個怎麼做? 有我的代碼:從圖表面板中間的JFreeChart AreaChart

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(); 
     } 
    }); 
} 
+0

交叉貼[這裏](http://www.jfree.org/forum/viewtopic。 PHP?F = 3&T = 116744)。 – trashgod

回答

2

設置上緣上域座標軸:

domain.setUpperMargin(0.5);

+0

是的適用於我,謝謝格雷厄姆先生 –