jfreechart-date轴不是从当前时间开始的

eivnm1vs  于 2021-06-26  发布在  Java
关注(0)|答案(0)|浏览(271)

我遇到了一个问题,我的jfreechart从当前时间前一小时开始(即x轴最左边的值是当前时间前1小时)。然后,图表从最右边的值(即当前时间)开始打印。我想让它在x轴上最左边的值是当前时间。我做错了什么?
编辑:使用jfreechart显示时间序列中最近更改的解决方案正是我使用的实现,advancetime()然后appenddata()不会阻止从当前时间开始绘制。

public class DTSCTest 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 = 60*60;
    private static final int FAST = 1000;
    private static final int SLOW = FAST * 5;
    private static final Random random = new Random();
    private double gateStart = ThreadLocalRandom.current().nextInt(0, 101);
    private boolean returning = false;
    private Timer timer;

    public DTSCTest(final String title) {
        super(title);
        final DynamicTimeSeriesCollection dataset =
                new DynamicTimeSeriesCollection(1, COUNT, new Second());
        Calendar c = Calendar.getInstance();
        c.setTime(new Date());
        c.add(Calendar.SECOND, -COUNT);
        dataset.addValue(0, 0, (float) gateStart);
        dataset.setTimeBase(new Second(c.getTime()));
        dataset.addSeries(new float[1], 0, "Longwall Data");
        JFreeChart chart = createChart(dataset);
        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) {
                if(gateStart == 100){
                    returning = true;
                }else if(gateStart == 0){
                    returning = false;
                }
                if(returning){
                    gateStart--;
                }else{
                    gateStart++;
                }
                newData[0] = (float)gateStart;
                //dataset.advanceTime();
                System.out.println(dataset.getOldestTime().toString());
                dataset.appendData(newData);
            }
        });
    }

    private JFreeChart createChart(final XYDataset dataset) {
        final JFreeChart result = ChartFactory.createTimeSeriesChart(
                TITLE, "Time", "Shearer Position", dataset, true, true, false);
        final XYPlot plot = result.getXYPlot();
        DateAxis domain = (DateAxis)plot.getDomainAxis();
        domain.setDateFormatOverride(new SimpleDateFormat("HH:mm:ss"));
        ValueAxis range = plot.getRangeAxis();
        range.setRange(0, 100);
        return result;
    }

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

    public static void main(final String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                DTSCTest demo = new DTSCTest(TITLE);
                demo.pack();
                RefineryUtilities.centerFrameOnScreen(demo);
                demo.setVisible(true);
                demo.start();
            }
        });
    }
}

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题