将一串随机数输入到二维坐标轴中,不断刷新JPanel,实现动态显示的效果

import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Chart_test extends JFrame {

private List<Integer> values;// 保存接受的数据容器
private static final int MAX_VALUE = 180;// 接受到的数据最大值
private static final int MAX_COUNT_OF_VALUES = 50;// 最多保存数据的个数
// private
private MyCanvas trendChartCanvas = new MyCanvas();
// 框架起点坐标
private final int FREAME_X = 50;
private final int FREAME_Y = 50;
private final int FREAME_WIDTH = 600;// 横
private final int FREAME_HEIGHT = 250;// 纵// 原点坐标
private final int Origin_X = FREAME_X + 50;
private final int Origin_Y = FREAME_Y + FREAME_HEIGHT - 30;// X,Y轴终点坐标
private final int XAxis_X = FREAME_X + FREAME_WIDTH - 30;
private final int XAxis_Y = Origin_Y;
private final int YAxis_X = Origin_X;
private final int YAxis_Y = FREAME_Y + 30;// X轴上的时间分度值(1分度=40像素)
private final int TIME_INTERVAL = 50;
// Y轴上值
private final int PRESS_INTERVAL = 30;public Chart_test() {super("前端界面显示:");values = Collections.synchronizedList(new ArrayList<Integer>());// 防止引起线程异常// 创建一个随机数线程new Thread(new Runnable() {public void run() {Random rand = new Random();try {while (true) {addValue(rand.nextInt(MAX_VALUE) + 90);repaint();Thread.sleep(100);}} catch (InterruptedException b) {b.printStackTrace();}}}).start();this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setBounds(300, 200, 900, 600);this.add(trendChartCanvas, BorderLayout.CENTER);this.setVisible(true);
}public void addValue(int value) {// 循环的使用一个接受数据的空间if (values.size() > MAX_COUNT_OF_VALUES) {values.remove(0);}values.add(value);
}// 画布重绘图
class MyCanvas extends JPanel {private static final long serialVersionUID = 1L;public void paintComponent(Graphics g) {Graphics2D g2D = (Graphics2D) g;Color c = new Color(200, 70, 0);g.setColor(c);super.paintComponent(g);// 绘制平滑点的曲线g2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);int w = XAxis_X;// 起始点int xDelta = w / MAX_COUNT_OF_VALUES;int length = values.size() - 10;for (int i = 0; i < length - 1; ++i) {g2D.drawLine(xDelta * (MAX_COUNT_OF_VALUES - length + i), values.get(i),xDelta * (MAX_COUNT_OF_VALUES - length + i + 1), values.get(i + 1));}// 画坐标轴g2D.setStroke(new BasicStroke(Float.parseFloat("2.0F")));// 轴线粗度// X轴以及方向箭头g.drawLine(Origin_X, Origin_Y, XAxis_X, XAxis_Y);// x轴线的轴线g.drawLine(XAxis_X, XAxis_Y, XAxis_X - 5, XAxis_Y - 5);// 上边箭头g.drawLine(XAxis_X, XAxis_Y, XAxis_X + 5, XAxis_Y + 5);// 下边箭头// Y轴以及方向箭头g.drawLine(Origin_X, Origin_Y, YAxis_X, YAxis_Y);g.drawLine(YAxis_X, YAxis_Y, YAxis_X - 5, YAxis_Y + 5);g.drawLine(YAxis_X, YAxis_Y, YAxis_X + 5, YAxis_Y + 5);// 画X轴上的时间刻度(从坐标轴原点起,每隔TIME_INTERVAL(时间分度)像素画一时间点,到X轴终点止)g.setColor(Color.BLUE);g2D.setStroke(new BasicStroke(Float.parseFloat("1.0f")));// X轴刻度依次变化情况for (int i = Origin_X, j = 0; i < XAxis_X; i += TIME_INTERVAL, j += TIME_INTERVAL) {g.drawString(" " + j, i - 10, Origin_Y + 20);}g.drawString("时间", XAxis_X + 5, XAxis_Y + 5);// 画Y轴上血压刻度(从坐标原点起,每隔10像素画一压力值,到Y轴终点止)for (int i = Origin_Y, j = 0; i > YAxis_Y; i -= PRESS_INTERVAL, j += TIME_INTERVAL) {g.drawString(j + " ", Origin_X - 30, i + 3);}g.drawString("幅度/Amplitude", YAxis_X - 5, YAxis_Y - 5);// 血压刻度小箭头值// 画网格线g.setColor(Color.BLACK);// 坐标内部横线for (int i = Origin_Y; i > YAxis_Y; i -= PRESS_INTERVAL) {g.drawLine(Origin_X, i, Origin_X + 10 * TIME_INTERVAL, i);}// 坐标内部竖线for (int i = Origin_X; i < XAxis_X; i += TIME_INTERVAL) {g.drawLine(i, Origin_Y, i, Origin_Y - 6 * PRESS_INTERVAL);}}
}public static void main(String[] args) {// TODO Auto-generated method stubnew Chart_test();
}

}

原文:https://blog.csdn.net/sinat_22797429/article/details/53223672

将一串随机数输入到二维坐标轴中,不断刷新JPanel,实现动态显示的效果微笑相关推荐

  1. Python:列表推导生成随机数矩阵(高教社,《Python编程基础及应用》习题4-10) (10分)---生成一个m行n列的元素值不大于20的随机数矩阵(二维列表)

    前言 PTA程序设计类教学平台-def函数 运行环境Python3.6 小白进阶之路的学习与记录之------列表 题目: 编写一个Python函数,生成一个m行n列的元素值不大于20的随机数矩阵(二 ...

  2. Java黑皮书课后题第8章:**8.37(猜测首府)编写一个程序,重复提示用户输入一个州的首府。当接收到用户输入后,程序报告答案是否正确。假设50个州以及它们的首府保存在一个二维数组中,提示用户回答所

    **8.37(猜测首府)编写一个程序,重复提示用户输入一个州的首府 题目 题目描述与运行示例 破题 代码 题目 题目描述与运行示例 **8.37(猜测首府)编写一个程序,重复提示用户输入一个州的首府. ...

  3. Java黑皮书课后题第8章:*8.27(列排序)用下面的方法实现一个二维数组中的列排序。返回新数组,且原数组保持不变。编写一个测试程序,提示用户输入一个3*3的double型矩阵,显示一个排好的矩阵

    *8.27(列排序)用下面的方法实现一个二维数组中的列排序.返回新数组,且原数组保持不变.编写一个测试程序,提示用户输入一个3*3的double型矩阵,显示一个排好的矩阵 题目 题目描述与运行示例 破 ...

  4. Java黑皮书课后题第8章:*8.26(行排序)用下面的方法实现一个二维数组中的行排序。返回新数组,且原数组保持不变。编写一个测试程序,提示用户输入一个3*3的double型矩阵,显示一个排好的矩阵

    *8.26(行排序)用下面的方法实现一个二维数组中的行排序.返回新数组,且原数组保持不变.编写一个测试程序,提示用户输入一个3*3的double型矩阵,显示一个排好的矩阵 题目 题目描述与运行示例 破 ...

  5. c语言二维数组输入数据,c语言编写程序,把下面的数据输入到一个二维数组中:...

    c语言编写程序,把下面的数据输入到一个二维数组中: 答案:3  信息版本:手机版 解决时间 2019-10-07 01:08 已解决 2019-10-06 03:19 1. 编写程序,把下面的数据输入 ...

  6. 算法013:二维数组中的查找-在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断中是否存在

    题目:在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数.示例: 现有 ...

  7. java 3行4列二维数组_输入一个3行4列矩阵到二维数组中,并打印出来

    输入一个M行M列的二维数组,计算四周元素之和 设置数组S(M,M),M>1,ssum=s(1,1)+s(M,M)+s(1,M)+s(M,1)ifM>2fori=2toM-1ssum=ssu ...

  8. java二维数组输入_java 二维数组的输入输出问题

    java 二维数组的输入输出问题 有一个二维数组 里面包含了很大的数字.我要把它通过输出流存储在.dat文件中 然后在另一个程序中把这些信息读取出来,并且存储在另外一个二维数组中.请问该怎么办?这个数 ...

  9. QRCode二维码生成方案及其在带LOGO型二维码中的应用(2)

    QRCode二维码生成方案及其在带LOGO型二维码中的应用(2) 原文:QRCode二维码生成方案及其在带LOGO型二维码中的应用(2) 续前:QRCode二维码生成方案及其在带LOGO型二维码中的应 ...

最新文章

  1. numpy 数组和矩阵的乘法
  2. hbase put 异步 java_java – HBase BufferedMutator vs PutList性能
  3. stm8s开发(八) IIC的使用:IIC主机通信!
  4. 第三次学JAVA再学不好就吃翔(part75)--集合概述
  5. NSTimer 进阶使用总结与注意事项
  6. sql count用法_SQL学习笔记3:count(*)函数
  7. spring jmx_JMX和Spring –第3部分
  8. 基于opencv在摄像头ubuntu根据视频获取
  9. 一道微软Python面试题(文末附python教程丶电子书资料分享)
  10. 一篇文章让你彻底了解Java内部类
  11. 机器学习之K均值聚类算法K-Means(python代码实现)
  12. 【游戏】——微信打飞机
  13. MA5680T配置指导
  14. php continue什么意思,php switch continue 什么意思??
  15. python怎么群发邮件_python群发邮件怎么做
  16. ChatGPT接入微信公众号(手把手教学)
  17. Idea基本操作攻略
  18. 电源选项中S1,S2,S3,S4,S5的含义
  19. 计算圆周率 Pi (π)值
  20. kubernetes 教程

热门文章

  1. python将2个列表list合并到1个列表使用appenden_【新手入门】20个很实用的 Python 学习小技巧...
  2. mysql 演示吧_postgreSQL常用命令
  3. serverless搭建html,基于ServerLess的极简网页计数器:源码分析与实践
  4. php怎么实现商品评论功能,php购物车功能如何实现
  5. erp系统服务器怎么关机,服务器怎么设置自动关机
  6. 三调地类代码_FME实现三调地类变化流量表制作
  7. jmeter一个线程组多个请求_JMeter接口测试以及完善教程
  8. socket php验证客户端验证,用Socket发送电子邮件(利用需要验证的SMTP服务器)_php基础...
  9. VHDL基本门电路和数值比较器的设计
  10. 实现verilog设计控制交通灯