Rumah Java javaTutorial java图形界面编程之模拟血压计

java图形界面编程之模拟血压计

Jan 17, 2017 pm 04:23 PM

package GraphicsCanvas;
import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.Timer;
import javax.swing.UIManager;
/**
 * 模拟血压计类,高压、低压
 * 
 * @author 樊俊彬
 * @Time 2013-12-10
 */
public class Blood extends JFrame {
 private static final long serialVersionUID = 1L;
 private Image iBuffer;
 private MyCanvas bloodCanvas = new MyCanvas();
 private JTextField highPressText, lowPressText;
 // 画布长宽
 private final int CANVAS_WIDTH = 400;
 private final int CANVAS_HEIGHT = 800;
 // 玻璃外壳长宽与起始坐标
 private final int BLOOD_WIDTH = 30;
 private final int BLOOD_HEIGHT = 650;
 private final int BLOOD_X = CANVAS_WIDTH / 2 - BLOOD_WIDTH / 2;
 private final int BLOOD_Y = 50;
 // 框架大小与起始坐标
 private final int FRAME_WIDTH = 120;
 private final int FRAME_HEIGHT = 720;
 private final int FRAME_X = CANVAS_WIDTH / 2 - FRAME_WIDTH / 2;
 private final int FRAME_Y = BLOOD_Y - 20;
 // 0刻度线的横纵坐标与长度
 private final int ZORELINE_Y = BLOOD_Y + BLOOD_HEIGHT - 10;
 private final int ZORELINE_X = CANVAS_WIDTH / 2 + BLOOD_WIDTH / 2;
 private final int LINE_LENGTH = 8;
 // 输入的高压、低压
 private int highPressInput, lowPressInput;
 // 高、低压水银柱的动态高度
 int highPressHeight = 0;
 int lowPressHeight = 0;
 int startLow = BLOOD_Y;
 // 高、低水银计时器
 Timer highPressTimer, lowPressTimer;
 public Blood() {
  super("自定义血压计模型-FreeDoman");
  this.setDefaultCloseOperation(EXIT_ON_CLOSE);
  this.setBounds(300, 50, CANVAS_WIDTH, CANVAS_HEIGHT + 20);
  // 添加控制到框架北部区
  JPanel topPanel = new JPanel();
  this.add(topPanel, BorderLayout.NORTH);
  highPressText = new JTextField(5);
  lowPressText = new JTextField(5);
  JButton pressButton = new JButton("显示");
  pressButton.addActionListener(new ActionListener() {
   @Override
   public void actionPerformed(ActionEvent arg0) {
    highPressInput = Integer.parseInt(highPressText.getText());
    lowPressInput = Integer.parseInt(lowPressText.getText());
    ActionListener highPressTaskPerformer = new ActionListener() {
     public void actionPerformed(ActionEvent evt) {
      // 高度增加 1像素/0.01s,只到满足输入的要求,停止计时
      highPressHeight += 1;
      bloodCanvas.repaint();
      if (highPressHeight == highPressInput * 2) {
       highPressTimer.stop();
       // 低压水银柱计时器嵌套于高压计时器内部,有先后顺序(高压先走,后低压)
       startLow = ZORELINE_Y - highPressHeight;
       ActionListener lowPressTaskPerformer = new ActionListener() {
        public void actionPerformed(ActionEvent evt) {
         lowPressHeight += 1;
         bloodCanvas.repaint();
         if (lowPressHeight == ZORELINE_Y
           - lowPressInput * 2 - startLow)
          lowPressTimer.stop();
        }
       };
       lowPressTimer = new Timer(10, lowPressTaskPerformer);
       lowPressTimer.start();
      }
     }
    };
    // 定义每0.01秒执行一次的事件监听器
    highPressTimer = new Timer(10, highPressTaskPerformer);
    highPressTimer.start();
   }
  });
  topPanel.add(new JLabel("高压值", JLabel.CENTER));
  topPanel.add(highPressText);
  topPanel.add(new JLabel("低压值", JLabel.CENTER));
  topPanel.add(lowPressText);
  // topPanel.add(new JLabel("心率", JLabel.CENTER));
  topPanel.add(pressButton);
  // 添加画布到中央区
  this.add(bloodCanvas, BorderLayout.CENTER);
  this.setResizable(false);
  this.setVisible(true);
 }
 /**
  * 画布重绘血压计
  */
 class MyCanvas extends Canvas {
  public void paint(Graphics g) {
   // 画边框
   g.setColor(Color.BLACK);
   g.draw3DRect(FRAME_X, FRAME_Y, FRAME_WIDTH, FRAME_HEIGHT, true);
   // 画玻璃外壳
   g.setColor(Color.ORANGE);
   g.fill3DRect(BLOOD_X, BLOOD_Y, BLOOD_WIDTH, BLOOD_HEIGHT, true);
   // 高压水银柱
   g.setColor(Color.RED);
   g.fill3DRect(BLOOD_X, ZORELINE_Y - highPressHeight, BLOOD_WIDTH,
     highPressHeight, true);
   // 低压高压水银柱
   g.setColor(Color.ORANGE);
   g.fill3DRect(BLOOD_X, startLow, BLOOD_WIDTH, lowPressHeight, true);
   // 画底部水银圆球
   g.setColor(Color.RED);
   g.fillOval(CANVAS_WIDTH / 2 - 30, ZORELINE_Y - 5, 60, 60);
   // 右侧0刻度线起始刻度与坐标(刻度线纵坐标以line_y渐变)
   int rightStartDegree = 0;

   int line_y = ZORELINE_Y;
   for (; line_y > BLOOD_Y; line_y -= 2) {
    // 2个像素点为一个最小分度 1度
    g.setColor(Color.BLACK);
    g.drawLine(ZORELINE_X, line_y, ZORELINE_X + LINE_LENGTH, line_y);
    // 每隔10最小分度个画10度刻度线
    if (line_y % 20 == 10) {
     g.setColor(Color.BLUE);
     g.drawLine(ZORELINE_X, line_y,
       ZORELINE_X + LINE_LENGTH * 2, line_y);
     g.drawString(rightStartDegree + "", ZORELINE_X
       + LINE_LENGTH * 3, line_y + 4);
     rightStartDegree += 10;
    }
   }
   // 左侧0刻度线起始刻度与坐标(刻度线纵坐标以line_y渐变)
   int leftStartDegree = 0;
   int leftLine_y = ZORELINE_Y;
   for (; leftLine_y > BLOOD_Y; leftLine_y -= 6) {
    // 6个像素点为一个最小分度 1度
    g.setColor(Color.BLACK);
    g.drawLine(BLOOD_X, leftLine_y, BLOOD_X - LINE_LENGTH,
      leftLine_y);
    // 每隔10最小分度个画10度刻度线
    if (leftLine_y % 20 == 10) {
     g.setColor(Color.BLUE);
     g.drawLine(BLOOD_X, leftLine_y, BLOOD_X - LINE_LENGTH * 2,
       leftLine_y);
     g.drawString(leftStartDegree + "", BLOOD_X - LINE_LENGTH
       * 4, leftLine_y + 4);
     leftStartDegree += 10;
    }
   }
  }
  /**
   * 双缓冲技术:复杂的计算速度慢于屏幕显示,用缓冲解决屏幕闪烁问题
   */
  @Override
  public void update(Graphics g) {
   if (iBuffer == null) {
    iBuffer = createImage(this.getSize().width,
      this.getSize().height);
   }
   Graphics gBuffer = iBuffer.getGraphics();
   gBuffer.setColor(getBackground());
   gBuffer.fillRect(0, 0, this.getSize().width, this.getSize().height);
   paint(gBuffer);
   gBuffer.dispose();
   g.drawImage(iBuffer, 0, 0, this);
  }
 }
 public static void main(String[] args) {
  // 设置界面的外观,为系统外观
  try {
   UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
  } catch (Exception e) {
   e.printStackTrace();
  }
  new Blood();
 }
}
Salin selepas log masuk

更多java图形界面编程之模拟血压计相关文章请关注PHP中文网!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimanakah mekanisme kelas muatan Java berfungsi, termasuk kelas yang berbeza dan model delegasi mereka? Bagaimanakah mekanisme kelas muatan Java berfungsi, termasuk kelas yang berbeza dan model delegasi mereka? Mar 17, 2025 pm 05:35 PM

Kelas kelas Java melibatkan pemuatan, menghubungkan, dan memulakan kelas menggunakan sistem hierarki dengan bootstrap, lanjutan, dan pemuat kelas aplikasi. Model delegasi induk memastikan kelas teras dimuatkan dahulu, yang mempengaruhi LOA kelas tersuai

Bagaimanakah saya melaksanakan caching pelbagai peringkat dalam aplikasi java menggunakan perpustakaan seperti kafein atau cache jambu? Bagaimanakah saya melaksanakan caching pelbagai peringkat dalam aplikasi java menggunakan perpustakaan seperti kafein atau cache jambu? Mar 17, 2025 pm 05:44 PM

Artikel ini membincangkan pelaksanaan caching pelbagai peringkat di Java menggunakan kafein dan cache jambu untuk meningkatkan prestasi aplikasi. Ia meliputi persediaan, integrasi, dan faedah prestasi, bersama -sama dengan Pengurusan Dasar Konfigurasi dan Pengusiran PRA Terbaik

Bagaimanakah saya boleh menggunakan JPA (Java Constence API) untuk pemetaan objek-objek dengan ciri-ciri canggih seperti caching dan malas malas? Bagaimanakah saya boleh menggunakan JPA (Java Constence API) untuk pemetaan objek-objek dengan ciri-ciri canggih seperti caching dan malas malas? Mar 17, 2025 pm 05:43 PM

Artikel ini membincangkan menggunakan JPA untuk pemetaan objek-relasi dengan ciri-ciri canggih seperti caching dan pemuatan malas. Ia meliputi persediaan, pemetaan entiti, dan amalan terbaik untuk mengoptimumkan prestasi sambil menonjolkan potensi perangkap. [159 aksara]

Bagaimanakah saya menggunakan Maven atau Gradle untuk Pengurusan Projek Java Lanjutan, Membina Automasi, dan Resolusi Ketergantungan? Bagaimanakah saya menggunakan Maven atau Gradle untuk Pengurusan Projek Java Lanjutan, Membina Automasi, dan Resolusi Ketergantungan? Mar 17, 2025 pm 05:46 PM

Artikel ini membincangkan menggunakan Maven dan Gradle untuk Pengurusan Projek Java, membina automasi, dan resolusi pergantungan, membandingkan pendekatan dan strategi pengoptimuman mereka.

Bagaimanakah saya membuat dan menggunakan perpustakaan Java Custom (fail JAR) dengan pengurusan versi dan pergantungan yang betul? Bagaimanakah saya membuat dan menggunakan perpustakaan Java Custom (fail JAR) dengan pengurusan versi dan pergantungan yang betul? Mar 17, 2025 pm 05:45 PM

Artikel ini membincangkan membuat dan menggunakan perpustakaan Java tersuai (fail balang) dengan pengurusan versi dan pergantungan yang betul, menggunakan alat seperti Maven dan Gradle.

See all articles