-
2021-03-03 12:34:18
package com.tur.demo;
import javax.swing.*;
import java.awt.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
class DataReceiver extends JPanel {
private List values; // 保存接收到的数据的容器.
private static final int MAX_VALUE = 200; // 接收到的数据的最大值.
private static final int MAX_COUNT_OF_VALUES = 50; // 最多保存数据的个数.
public DataReceiver() {
values = Collections.synchronizedList(new ArrayList());
// 使用一个线程模拟产生数据.
new Thread(new Runnable() {
@Override
public void run() {
Random rand = new Random();
try {
while (true) {
addValue(rand.nextInt(MAX_VALUE)); // 产生一个数据,并模拟接收并放到容器里.
repaint();
Thread.sleep(100);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
int w = getWidth();
int h = getHeight();
int xDelta = w / MAX_COUNT_OF_VALUES;
int length = values.size();
for (int i = 0; i < length - 1; ++i) {
g2d.drawLine(xDelta * (MAX_COUNT_OF_VALUES - length + i),h-normalizeValueForYAxis(values.get(i), h),
xDelta * (MAX_COUNT_OF_VALUES - length + i + 1),h-normalizeValueForYAxis(values.get(i + 1), h));
}
}
/**
* 接收到的数据放入内存.
* @param value
*/
private void addValue(int value) {
// 循环的使用一个接收数据的空间.
// 最好是实现一个循环数组,而不是偷懒的使用ArrayList.
if (values.size() > MAX_COUNT_OF_VALUES) {
values.remove(0);
}
values.add(value);
}
/**
* 规一化y轴方向的值. 使得value在y轴的值为[0, height]之间.
*
* @param value
* @param height
* @return
*/
private int normalizeValueForYAxis(int value, int height) {
return (int) ((double) height / MAX_VALUE * value);
}
private static void createGuiAndShow() {
JFrame frame = new JFrame("");
frame.getContentPane().add(new DataReceiver());
// Set frame's close operation and location in the screen.
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 400);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
createGuiAndShow();
}
}
更多相关内容 -
c# winform绘制波形图
2022-06-13 16:07:33c# winform绘制波形图 -
c#winform绘制波形图
2022-03-10 14:42:52c#winform绘制波形图 -
绘制波形图
2018-12-19 09:27:50在对话框上有一个...启动一个定时器,每次定时器到时,所有波形数据都前移一个单位,并获取一个80以内的随机数作为波形的最后一个数据,然后以绿色画笔在绘图控件上绘制波形。这样就实现了波形的绘制及动态变化。 -
C#实现wav文件读取并绘制波形图
2019-11-25 15:57:26作者原来的下载链接失效了,我照着网页上代码重新建的工程,可以跑,作为一名多年的伸手党,希望能够帮助到大家! https://blog.csdn.net/qq_40006363/article/details/78655110 -
java读取wav文件(波形文件)并绘制波形图的方法
2020-09-03 14:48:42主要介绍了java读取wav文件(波形文件)并绘制波形图的方法,涉及java操作多媒体音频文件转换的相关技巧,需要的朋友可以参考下 -
VC++ 实现绘制波形图动态图_outline7z8_信号波形图_park5dd_示波器界面_VC++实现绘制波形图动态图
2021-09-11 16:51:54VC++ 实现绘制波形图动态图,类似示波器的界面,信号用正弦信号模拟,可调节显示的幅度档和时间档,可对信号进行暂停观测,可上下左右移动信号波形。 -
WPF+Webbrowser+Echarts 绘制波形图
2022-07-13 11:05:18WPF+Webbrowser+Echarts+Naduio音频转换像素点位,像素点位转时间x与y关系点位,实现动态时间波形图,时间精确到毫秒。附原始MP3文件转wav文件,项目可直接运行 -
SerialChart串口绘图软件,从串口读入CSV数据(用逗号分隔),并直观地绘制波形图.zip
2022-05-13 19:29:24SerialChart串口绘图软件,用于从串口读入CSV数据(用逗号分隔),并直观地绘制波形图。 -
C#绘制波形图Demo
2018-07-07 10:41:34利用C#把数据绘制成二维图波形图,实时动态显示数据的变化 -
VC++ 实现绘制波形图动态图.zip
2019-12-12 17:30:07VC++ 实现绘制波形图动态图 VC++ 实现绘制波形图动态图 VC++ 实现绘制波形图动态图 VC++ 实现绘制波形图动态图 VC++ 实现绘制波形图动态图 VC++ 实现绘制波形图动态图 -
LabVIEW的波形图
2021-01-19 23:06:19波形图仅绘制单值函数,在波形图接收所有需要显示的数据后性显示在前面板窗口中,其显示的图形是稳定的波形。在下接收数据时,波形图不保存上的历史数据,数据全部更新,在前面板窗口中只显示当前接收的数据。 ... -
go-waveform:从 wav 音频文件绘制波形图像
2021-05-29 20:11:43去波形 Golang 项目,目的是练习、理解 golang 和音频文件格式。 用法 要求 Go 1.11(Go 模块) 命令行 通过 CLI 生成波形图像 GO111MODULE=on make ./bin/go-waveform -t dark -r 1000 -f png example/violin.wav ... -
易语言BASS绘制波形图
2020-08-20 03:08:27易语言BASS绘制波形图源码系统结构:draw,取低十六位,取高十六位, ======窗口程序集1 || ||------_按钮1_被单击 || ||------draw || ||------取低十六位 || ||------取高十六位 || ||------__启动窗口_创建完 -
Android系统音频PCM波形图绘制算法与实现.docx
2022-06-27 00:48:51Android系统音频PCM波形图绘制算法与实现.docxAndroid系统音频PCM波形图绘制算法与实现.docxAndroid系统音频PCM波形图绘制算法与实现.docxAndroid系统音频PCM波形图绘制算法与实现.docxAndroid系统音频PCM波形图绘制... -
BASS绘制波形图.rar
2020-04-04 11:01:17BASS绘制波形图.rar -
MFC 非常简单好用的一个 波形图控件
2021-07-21 19:23:52一个非常好用的MFC 曲线控件 在CDialog.h中定义控件 CChartCtrl m_cChartFx; 在CDialog.cpp中 绑定控件 DDX_Control(pDX, IDC_STATIC_FY, m_cChartFy); 初始化控件 CChartAxis *pAxis = NULL;... -
C# 绘制波形图
2012-08-27 11:37:19像 股票软件K线图一样, 可以放大, 缩小, 自适应, 比较多组数据 -
C#使用NAudio录音和播放音频文件-实时绘制音频波形图
2019-12-30 10:19:11包含使用NAudio进行录音和播放录音操作的代码,同时包括在录音时根据音频数据绘制波形图的代码,WPF绘制 -
C#绘制波形图的源代码
2021-03-16 01:51:09摘要:C#源码,图形图像,波形图,图形绘制 学习C#的参考范例源码,绘制波形图的源代码,运行编译的程序后,直接生成波形图,要了解原理的朋友,就请下载C#源码一看究竟。 -
QT篇之QChart绘制波形图操作(上)
2020-07-20 15:58:12现在开始QChart绘制波形图之旅 先看一下运行结果: 每个横坐标90000个点,一共跑了二百四十多万条数据,卡顿是有的,但是操作起来还说得过去 功能描述: 1. 可以将读取的CSV数据在波形图上描绘出来 2. 可以切换...接上篇文章QT篇之QT读取CSV数据
现在开始QChart绘制波形图之旅
先看一下运行结果:
每个横坐标90000个点,一共跑了二百四十多万条数据,卡顿是有的,但是操作起来还说得过去
功能描述:
1. 可以将读取的CSV数据在波形图上描绘出来 2. 可以切换不同的波形图页面 3. 可以在图表上显示红色垂线(P波) 4. 可以手动输入来调整垂线在波形图中的位置 5. 可以将波形图响应键鼠事件,执行缩放移动等操作 6. 可以用鼠标悬停显示波形图中曲线的坐标点信息 7. 可以显示动态波形图
有了需求,我们开始分析解决方案
问题:
1. 用什么图表(工具)来绘制波形图(曲线)? 2. 怎么在图表上绘制一条垂线(折线)? 3. 怎么在图表上添加项目数据? 4. 怎么为这么多图表设计布局? 5. 怎么动态调整垂线的位置? 6. 怎么为图表添加缩放移动操作? 7. 怎么为图表曲线(/折线)序列添加鼠标悬停显示坐标点功能? 8. 怎么绘制一个动态的波形图?
下一篇,开始着手问题具体分析
-
VoiceRecorderDemo:iOS根据音频文件的音调高低绘制波形图
2021-05-15 20:53:42VoiceRecorderDemo iOS根据音频文件的音调高低,绘制波形图,可以做参考。 -
Python3.7 读取 mp3 音频文件生成波形图效果
2020-09-18 12:18:28主要介绍了Python3.7 读取 mp3 音频文件生成波形图小编,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 -
用QChart绘制波形图 用到的知识
2021-12-14 13:37:45用QChart绘制波形图 用到的知识Qt开发技术:QCharts(一)QCharts基本介绍以及图表框架详解
QT – QChart的几种 坐标轴 的详细介绍及使用代码示例
//setUserData()和userData() //通过setUserData(),我们可以存储用户数据。 //注意:用户数据需要被定义为QObjectUserData类型。 struct SenderInfo:public QObjectUserData { QString strName; } QPushButton *pButton = new QPushButton(this); pButton->setText("Sender1"); // 用户数据 SenderInfo* pInfo = new SenderInfo; pInfo->strName="Sender1"; pButton->setUserData(Qt::UserRole, pInfo ); // 设置用户数据 // 连接信号槽 connect(pButton, &QPushButton::clicked, this, &MainWindow::onClicked); 槽函数,获取用户数据,执行相应操作。 void onClicked() { // 获取发送者 QObject *pObject = this->sender(); QPushButton *pButton = qobject_cast<QPushButton *>(pObject); // 获取用户数据 SenderInfo* pInfo = (SenderInfo*)(pButton->userData(Qt::UserRole)); qDebug() << "sender: " <<pInfo->strtName; } 通过userData()可以获取QObjectUserData数据,然后转换成我们需要的类型User。
//效率较高的往折线图中插入数据 _pLineSeries = new QLineSeries; _pLineSeries2 = new QLineSeries; _pLineSeries3 = new QLineSeries; _pLineSeries4 = new QLineSeries; QList<QLineSeries *> listLine; listLine.append(_pLineSeries); listLine.append(_pLineSeries2); listLine.append(_pLineSeries3); listLine.append(_pLineSeries4); for(int index = 1; index < 4; index++) { QList<QPointF> listPointF; for(int index = 0; index < 11; index++) { listPointF << QPointF(index, qrand()%11); } listLine.at(index)->append(listPointF); listLine.at(index)->setName(QString("通道%1").arg(index+1)); listLine.at(index)->setPen(QPen(QColor(qrand()%256, qrand()%256, qrand()%256), 2)); listLine.at(index)->setUseOpenGL(true);//opengl显示加速,奔奔马上变奔驰 // 通用:将批量数据插入到图表中 _pChart->addSeries(listLine.at(index)); }
Qt 让QLabel自适应text的大小,并且自动换行
在实现了newform的2个页面的功能以后,为了完善产品的人性化,我在第2个页面上增加了一个显示前面已经选择的路径和模板名称的功能。但是这里就遇到了一个问题,如果万一用户选择的路径和名称都太长了,那么下面在显示的时候就会截断,这就很不爽了。
别看这个小问题,这就涉及了2个技巧。
1
让QLabel自适应text的大小,直接用下面的代码:
LabelName->adjustSize();
LabelName->setText(“1234”+"\r\n"+“456789”);//两行显示
LabelName->LabelName->setAlignment(Qt::AlignCenter);//垂直水平居中让QLabel能够自动判断并换行显示:
LabelName->setGeometry(QRect(328, 240, 329, 27*4)); //四倍行距LabelName->setWordWrap(true);
LabelName->setAlignment(Qt::AlignTop);设置QLabel文本的颜色
第一种,使用setPalette()方法如下:
QLabel *label = new QLabel(tr("Hello Qt!")); QPalette pe; pe.setColor(QPalette::WindowText,Qt::white); pe.setColor(QPalette::Background, Q::yellow); label->setAutoFillBackground(true); //这句很关键,否则背景色被默认windows替代 label->setPalette(pe);
第二种,使用样式表如下:
setStyleSheet("color:red;"); //setStyleSheet("color:#ff6600;");
第三种,使用QStyle,在Qt Demo中有一个很好的讲解QStyle的例子,可以参考学习。
第四种,使用一些简单的HTML格式:
QLabel *label = new QLabel("<h2><i>Hello</i><font color=red>Qt!</font></h2>");
往QChart中显示折线图,需要注意的:
首先是画两条折线(限制线)的代码
其次,是第一种为上面画的两条折线添加并关联坐标轴【一定要注意将上面画的两条折线关联到X/Y轴上,否则画的东西跟坐标轴上显示的数据毫无关联】
第二种为上面画的两条折线,添加显示,这种方法可取,只用设置一次,不用为关联到这上面的所有折线都attachAxis,一劳永逸
推荐使用第二种方法
最后,整个效果如下,完美
**
listLine.at(index)->setUseOpenGL(true);//opengl显示加速,奔奔马上变奔驰
**
-
VC++ 实现绘制波形图动态图_outline7z8_信号波形图_park5dd_示波器界面_VC++实现绘制波形图动态图_源码
2021-10-05 22:33:32VC++ 实现绘制波形图动态图_outline7z8_信号波形图_park5dd_示波器界面_VC++实现绘制波形图动态图_源码.zip -
MFC绘制波形图代码
2018-12-18 09:45:44改代码实现了波形图的的绘制并显示,是在基于MFC框架下开发的,一键编译运行即可,并可查看源码,可快速移植 -
DFT的matlab源代码-DFT_FFT_drawWAV:利用Java实现DFT、FFT,并绘制波形图和频谱图,音频播放频谱或波形图...
2021-05-26 04:24:40利用Java实现DFT、FFT,读取WAV文件,并绘制波形图和频谱图,音频播放频谱或波形图实时显示效果。 几个工程打包于文件夹DFT_FFT: DFT_IDFT:计算前N点DFT,并绘制波形图或频谱图; FFT:计算前N点FFT,并绘制波形图... -
端点检测绘制波形图1
2022-08-03 21:50:22端点检测绘制波形图1