如何做一个实时动态Swing折线图呢?
由于脑海中构想了如下图这样一个画面,所以经过查资料写代码,实现了视觉化的图景。分享之。。。
public class JFSwingDynamicChart extends JFrame implements ActionListener {
private TimeSeries series;
private double lastValue = 100.0;
/**
* 构造
*/
public JFSwingDynamicChart() {
getContentPane().setBackground(Color.green);
}
/**
* 创建应用程序界面
*/
public void createUI() {
this.series = new TimeSeries("Math.random()-随机数据", Millisecond.class);
TimeSeriesCollection dataset = new TimeSeriesCollection(this.series);
ChartPanel chartPanel = new ChartPanel(createChart(dataset));
chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
JPanel buttonPanel = new JPanel();
buttonPanel.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4));
add(chartPanel);
add(buttonPanel, BorderLayout.SOUTH);
}
/**
* 根据结果集构造JFreechart报表对象
*
* @param dataset
* @return
*/
private JFreeChart createChart(XYDataset dataset) {
JFreeChart result = ChartFactory.createTimeSeriesChart("Swing动态折线图", "系统当前时间",
"动态数值变化", dataset, true, true, false);
XYPlot plot = (XYPlot) result.getPlot();
ValueAxis axis = plot.getDomainAxis();
axis.setAutoRange(true);
axis.setFixedAutoRange(60000.0);
axis = plot.getRangeAxis();
axis.setRange(0.0, 200.0);
return result;
}
public void actionPerformed(ActionEvent e) {
}
/**
* 动态运行
*/
public void dynamicRun() {
while (true) {
double factor = 0.90 + 0.2 * Math.random();
this.lastValue = this.lastValue * factor;
Millisecond now = new Millisecond();
this.series.add(new Millisecond(), this.lastValue);
try {
Thread.currentThread().sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
// 主函数入口
public static void main(String[] args) {
JFSwingDynamicChart jsdChart = new JFSwingDynamicChart();
jsdChart.setTitle("Swing动态折线图");
jsdChart.createUI();
jsdChart.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jsdChart.setBounds(100, 100, 900, 600);
jsdChart.setVisible(true);
// Color c=new Color((int)(Math.random()*256),(int)(Math.random()*256),(int)(Math.random()*256));
jsdChart.dynamicRun();
}
}
-------------------------
Thread.currentThread().sleep(100); //线程交替,给绘制线程以时间可以解决此异常
Exception in thread "main" org.jfree.data.general.SeriesException: You are attempting to add an observation for the time period Wed Jul 07 11:36:28 CST 2010 but the series already contains an observation for that time period. Duplicates are not permitted. Try using the addOrUpdate() method.
at org.jfree.data.time.TimeSeries.add(TimeSeries.java:529)
at org.jfree.data.time.TimeSeries.add(TimeSeries.java:572)
at org.jfree.data.time.TimeSeries.add(TimeSeries.java:558)
at chapter09.JFSwingDynamicChart.dynamicRun(JFSwingDynamicChart.java:76)
at chapter09.JFSwingDynamicChart.main(JFSwingDynamicChart.java:96)
- 大小: 103.7 KB
分享到:
相关推荐
《Python库:深入理解big_sleep-0.0.1-py3-none-any.whl》 在Python的世界里,库是开发者的重要工具,它们提供了一系列预定义的函数和模块,简化了编程过程,提高了效率。本文将详细介绍名为"big_sleep"的Python库...
《基于Java-Swing的贪吃蛇游戏开发详解》 在计算机编程领域,Java语言以其跨平台性和丰富的库支持,成为了开发各种应用的热门选择。在本篇中,我们将深入探讨如何利用Java的Swing库来实现一款经典的贪吃蛇游戏。...
标题中的"PyPI 官网下载 | big_sleep-0.8.5-py3-none-any.whl"指的是一款名为`big_sleep`的Python库,版本号为0.8.5,它在Python Package Index(PyPI)官网上可以被找到。PyPI是Python社区中最主要的软件仓库,...
标题中的“sleep-stage-identification-master”暗示了这是一个关于睡眠阶段识别的项目,而“故障诊断_ELM”可能指的是使用 Extreme Learning Machine(ELM,极简学习机)进行故障诊断的技术。ELM是一种高效的机器...
资源分类:Python库 所属语言:Python 资源全名:big_sleep-0.4.7-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
资源来自pypi官网。 资源全名:big_sleep-0.0.1-py3-none-any.whl
标题中的"NoSleep"是一个专为移动端H5页面设计的插件,它的主要功能是防止设备在用户浏览网页时自动进入休眠模式。这意味着用户在观看H5内容时,无论是Android还是iOS系统的手机,都能保持屏幕常亮,不会因为设备的...
"big-sleep-0.2.7.tar.gz" 是一个针对Python编程语言的库资源,其版本号为0.2.7,以tar.gz格式压缩。这种格式是Linux和Unix系统中常见的归档和压缩方法,它将多个文件打包成一个单一的文件,并通过gzip工具进行压缩...
针对这一问题,"NoSleep-1.4.0.dmg"软件应运而生,它通过阻止Mac电脑合上屏幕后自动休眠的方式,为用户提供了合上屏幕后也能保持网络连接的便利。 NoSleep软件的核心功能在于它的名字——“不休眠”。在没有安装...
《TC10 Wake-up and Sleep Specification for Automotive Ethernet》是针对汽车以太网的睡眠唤醒规范,由OPEN Alliance发布,旨在规范车载以太网系统在节能和高效操作中的睡眠模式和唤醒机制。该文档的主要作者包括...
NoSleep.js是一个JavaScript库,它允许开发者在网页上实现一个防止设备自动休眠或屏幕熄灭的功能,这对于那些需要持续显示或者需要用户长时间交互的应用场景非常有用。 【描述】中提到,NoSleep.js库提供了一个名为...
"Sleep Timer-crx插件"是一款专为浏览器设计的实用扩展程序,主要功能是在设定的时间后自动关闭或静音用户正在浏览的特定选项卡。这款插件特别适用于那些需要定时结束播放音乐、视频或者在线学习资源的情况,以避免...
T03_Sleep_Yield_Join.java
标题中的“sleep-stage-identification-master”表明这是一个关于睡眠阶段识别的项目,可能是一个研究或应用系统。"故障诊断"提示这个项目可能包含了对系统运行异常的检测和处理机制。ELM,全称Extreme Learning ...
GD32F4_PMU_Sleep_WakeupGD32F4_PMU_Sleep_WakeupGD32F4_PMU_Sleep_WakeupGD32F4_PMU_Sleep_WakeupGD32F4_PMU_Sleep_WakeupGD32F4_PMU_Sleep_WakeupGD32F4_PMU_Sleep_WakeupGD32F4_PMU_Sleep_WakeupGD32F4_PMU_Sleep...
$ pip install big-sleep 用法 $ dream " a pyramid made of ice " 图像将保存到调用命令的任何位置 先进的 您可以使用以下代码在代码中调用它 from big_sleep import Imagine dream = Imagine ( text = "fire
【标题】"Sleep Timer-开源" 是一个专为计算机设定定时关机功能的开源软件。在IT领域,开源软件指的是其源代码对公众开放,允许用户自由查看、使用、修改和分发。这样的软件通常由全球各地的开发者社区共同维护和...