2014-02-25 46 views
0

我找到了一個關於多個圖表here的示例,並嘗試稍微改進它。我希望這些值隨時間而改變。使用計時器更新JFreechart數據集

下面是代碼:

import java.awt.Color; 
import java.awt.EventQueue; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.Timer; 
import org.jfree.chart.ChartPanel; 
import org.jfree.chart.JFreeChart; 
import org.jfree.chart.plot.ThermometerPlot; 
import org.jfree.data.general.DefaultValueDataset; 
import org.jfree.data.time.Second; 
import org.jfree.data.time.TimePeriod; 
import org.jfree.ui.RefineryUtilities; 

/** 
* 
* @author AloneInTheDark 
*/ 
public class ThermometerDemo extends JPanel { 

    private static final int W = 200; 
    private static final int H = 2 * W; 
private static Timer timer; 
int artan=0; 
double VALUE; 
int FAST=1000; 
    DefaultValueDataset dataset ; 
    public ThermometerDemo(double value) { 
     this.setLayout(new GridLayout()); 
     VALUE=value; 


      timer = new Timer(FAST, new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
     artan++; 
      }}); 

      dataset = new DefaultValueDataset(VALUE+artan); 
     ThermometerPlot plot = new ThermometerPlot(dataset); 
     plot.setSubrangePaint(0, Color.green.darker()); 
     plot.setSubrangePaint(1, Color.orange); 
     plot.setSubrangePaint(2, Color.red.darker()); 
     JFreeChart chart = new JFreeChart("Demo", 
      JFreeChart.DEFAULT_TITLE_FONT, plot, true); 
     this.add(new ChartPanel(chart, W, H, W, H, W, H, 
      false, true, true, true, true, true)); 
    } 
    public static void start() { 
     timer.start(); 
    } 


    public static void main(final String[] args) { 

     EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       final JFrame f = new JFrame("Demo");    
       f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       f.setLayout(new GridLayout(1, 0)); 
       f.add(new ThermometerDemo(40)); 
       f.add(new ThermometerDemo(60)); 
       f.add(new ThermometerDemo(80)); 
       timer = new Timer(1000, new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       f.repaint(); 
      }}); 
       f.pack(); 
       f.setVisible(true); 

     start(); 

      } 
     }); 

    } 

} 

當我調試此項目,計時器的作品,我的「artan」變量增長每一秒,但沒有在圖表的變化。溫度計中的數值不會改變。我該如何解決這個問題?

EDIT:當我把這個線進入定時器,裏面有沒有圖表值: 數據集=新DefaultValueDataset(VALUE + artan);

回答

0

我找到了更新它們的方法。它運行良好,但接口存在一些問題。溫度計顏色隨機變化。代碼如下:

public class ThermometerDemo extends JPanel { 

    private static final int W = 200; 
    private static final int H = 2 * W; 
    private static Timer timer; 
    int artan = 0; 

    double VALUE; 
    int FAST = 1000; 
    DefaultValueDataset dataset; 

    public ThermometerDemo(double value) { 

     this.setLayout(new GridLayout()); 

     VALUE = value; 

     timer = new Timer(FAST, new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       VALUE++; 
       dataset.setValue(VALUE); 
      } 
     }); 

     dataset = new DefaultValueDataset(VALUE); 
     ThermometerPlot plot = new ThermometerPlot(dataset); 
     plot.setSubrangePaint(0, Color.green.darker()); 
     plot.setSubrangePaint(1, Color.orange); 
     plot.setSubrangePaint(2, Color.red.darker()); 
     JFreeChart chart = new JFreeChart("Demo", 
       JFreeChart.DEFAULT_TITLE_FONT, plot, true); 
     this.add(new ChartPanel(chart, W, H, W, H, W, H, 
       false, true, true, true, true, true)); 
     start(); 
    } 

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

    public static void main(final String[] args) { 

     EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 

       final JFrame f = new JFrame("Demo"); 
       f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       f.setLayout(new GridLayout(1, 0)); 
       f.add(new ThermometerDemo(40)); 
       f.add(new ThermometerDemo(60)); 
       f.add(new ThermometerDemo(80)); 
       f.pack(); 
       f.setVisible(true); 

      } 
     }); 

    } 

} 
+1

當值進入新的子範圍時,我看到顏色隨預期而改變。 – trashgod

+0

你是對的。我們也可以編輯子範圍和顏色。 – AloneInTheDark