我正在创建一个jfreechart,我想每5秒左右提供一次“实时”虚拟数据。此数据表示车辆相对于两端的某个位置(介于100和0之间)。我想这个位置数据显示与y轴表示当前一天的小时数和x轴显示其位置。当前位置数据工作正常,以5秒的间隔添加,但是x轴(时间)以秒而不是小时显示。
编辑:使用时x轴没有范围或记号 ((DateAxis)(domain)).setTickUnit(new DateTickUnit(DateTickUnitType.DAY, 1));
,只是空白
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 int COUNT = 10;
private static final int FAST = 5000;
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());
Date date = new Date();
dataset.setTimeBase(new Second(date));
float[] gateStartLoad = new float[1];
gateStartLoad[0] = (float)gateStart;
dataset.addSeries(gateStartLoad, 0, "Longwall Data");
JFreeChart chart = createChart(dataset);
this.add(new ChartPanel(chart), BorderLayout.CENTER);
JPanel btnPanel = new JPanel(new FlowLayout());
this.add(btnPanel, BorderLayout.SOUTH);
我在计时器上添加我的位置值(5000 ms)
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();
dataset.appendData(newData);
}
});
}
然后,我尝试设置刻度单位,使x轴显示一天中的小时数,而不是一天中的每一秒
private JFreeChart createChart(final XYDataset dataset) {
final JFreeChart result = ChartFactory.createTimeSeriesChart(
TITLE, "hh:mm:ss", "Shearer Position", dataset, true, true, false);
final XYPlot plot = result.getXYPlot();
ValueAxis domain = plot.getDomainAxis();
domain.setAutoRange(false);
((DateAxis)(domain)).setTickUnit(new DateTickUnit(DateTickUnitType.DAY, 1));
// domain.setAutoRange(true);
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();
}
});
}
}
似乎自己设置刻度单位不会影响y轴。如何使它显示当前一天的小时而不是秒?
1条答案
按热度按时间irlmq6kh1#
使用允许指定
DateFormat
,并使用带有适当格式字符串(包括小时)的dateformat,例如“hh:mm:ss”。