利用JavaSwing---画图小例子
Posted 无心无信
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用JavaSwing---画图小例子相关的知识,希望对你有一定的参考价值。
javaswing是制作桌面程序的必备知识,但是个人的感觉吧,还是有点次,不过实现的效果还可以!我之前用这个更改做过监控电脑cpu使用率的应用,这个例子还是很不错的!
1 import java.awt.BorderLayout;
2 import java.awt.EventQueue;
3
4 import javax.swing.JFrame;
5 import javax.swing.JPanel;
6 import javax.swing.border.EmptyBorder;
7
8
9
10 import javax.swing.*;
11 import java.awt.*;
12 import java.util.ArrayList;
13 import java.util.Collections;
14 import java.util.List;
15 import java.util.Random;
16
17 class DataReceiver extends JPanel {
18 private List<Integer> values; // 保存接收到的数据的容器.
19 private static final int MAX_VALUE = 200; // 接收到的数据的最大值.
20 private static final int MAX_COUNT_OF_VALUES = 50; // 最多保存数据的个数.
21
22 public DataReceiver() {
23 values = Collections.synchronizedList(new ArrayList<Integer>());
24
25 // 使用一个线程模拟产生数据.
26 new Thread(new Runnable() {
27 @Override
28 public void run() {
29 Random rand = new Random();
30
31 try {
32 while (true) {
33 addValue(rand.nextInt(MAX_VALUE)); // 产生一个数据,并模拟接收并放到容器里.
34 repaint();
35 Thread.sleep(100);
36 }
37 } catch (InterruptedException e) {
38 e.printStackTrace();
39 }
40 }
41 }).start();
42 }
43
44 @Override
45 public void paintComponent(Graphics g) {
46 super.paintComponent(g);
47
48 Graphics2D g2d = (Graphics2D) g;
49 g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
50
51 int w = getWidth();
52 int h = getHeight();
53 int xDelta = w / MAX_COUNT_OF_VALUES;
54 int length = values.size();
55
56 for (int i = 0; i < length - 1; ++i) {
57 g2d.drawLine(xDelta * (MAX_COUNT_OF_VALUES - length + i), normalizeValueForYAxis(values.get(i), h),
58 xDelta * (MAX_COUNT_OF_VALUES - length + i + 1), normalizeValueForYAxis(values.get(i + 1), h));
59 }
60 }
61
62 /**
63 * 接收到的数据放入内存.
64 * @param value
65 */
66 private void addValue(int value) {
67 // 循环的使用一个接收数据的空间.
68 // 最好是实现一个循环数组,而不是偷懒的使用ArrayList.
69 if (values.size() > MAX_COUNT_OF_VALUES) {
70 values.remove(0);
71 }
72
73 values.add(value);
74 }
75
76 /**
77 * 规一化y轴方向的值. 使得value在y轴的值为[0, height]之间.
78 *
79 * @param value
80 * @param height
81 * @return
82 */
83 private int normalizeValueForYAxis(int value, int height) {
84 return (int) ((double) height / MAX_VALUE * value);
85 }
86
87 private static void createGuiAndShow() {
88 JFrame frame = new JFrame("");
89
90 frame.getContentPane().add(new DataReceiver());
91
92 // Set frame\'s close operation and location in the screen.
93 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
94 frame.setSize(400, 400);
95 frame.setLocationRelativeTo(null);
96 frame.setVisible(true);
97 }
98
99 public static void main(String[] args) {
100 createGuiAndShow();
101 }
102 }
效果图:
以上是关于利用JavaSwing---画图小例子的主要内容,如果未能解决你的问题,请参考以下文章