Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用计时器更新JFreechart数据集_Java_Timer_Jfreechart - Fatal编程技术网

Java 使用计时器更新JFreechart数据集

Java 使用计时器更新JFreechart数据集,java,timer,jfreechart,Java,Timer,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 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();

            }
        });

    }

}
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);

            }
        });

    }

}
当我调试这个项目时,计时器工作,我的“artan”变量每秒都在增长,但图表中没有任何变化。温度计中的值不变。我怎样才能解决这个问题

编辑:当我将此行放入计时器时,图表中没有值:
数据集=新的DefaultValueDataset(值+artan)

我找到了更新它们的方法。它工作得很好,但在界面上存在一些问题。温度计的颜色是随机变化的。代码如下:

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();

            }
        });

    }

}
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);

            }
        });

    }

}

当值输入一个新的子范围时,我看到颜色按预期变化。