• 利用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 }

    效果图:

       

    有些鸟儿的羽毛太过耀眼,注定不是关在笼中的那种!
  • 相关阅读:
    JDK所有版本
    application.yml配置log日志
    eclipse配置lombok
    Eclipse配置springboot
    java 连接mongodb
    MongoDB shell操作
    mysql插入一万条数据
    Web设计精髓(转)
    SyntaxHighlighter -- 代码高亮插件
    input之placeholder与行高的问题。
  • 原文地址:https://www.cnblogs.com/wuxinwuxin/p/7763572.html
Copyright © 2020-2023  润新知