将一串随机数输入到二维坐标轴中,不断刷新JPanel,实现动态显示的效果微笑
生活随笔
收集整理的這篇文章主要介紹了
将一串随机数输入到二维坐标轴中,不断刷新JPanel,实现动态显示的效果微笑
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
將一串隨機數輸入到二維坐標軸中,不斷刷新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,实现动态显示的效果微笑的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android 动态添加Button(1
- 下一篇: GCC 中文手册 - 摘自纯C论坛