La copia del código es la siguiente:
Paquete GraphicScanvas;
import java.awt.borderlayut;
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;
/**
* Medidor de presión arterial simulado, alta presión, baja presión
*
* @author fan Junbin
* @Time 2013-12-10
*/
Blood de clase pública se extiende Jframe {
Private static final Long SerialVersionUid = 1L;
Imagen privada Ibuffer;
Mycanvas privado BloodCanvas = new Mycanvas ();
Private JTextfield HighPressText, LowPressText;
// longitud y ancho del lienzo
Private final int Canvas_width = 400;
Private final int Canvas_height = 800;
// La longitud y el ancho de la cáscara de vidrio y las coordenadas iniciales
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;
// tamaño de marco y coordenadas iniciales
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 marco_y = Blood_y - 20;
// Las coordenadas horizontales y verticales y la longitud de la línea de escala 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;
// Ingrese alto voltaje y bajo voltaje
Private int HighPressInput, LowPressInput;
// Altura dinámica de columnas de mercurio de alta y baja presión
int highpressheight = 0;
int LowPressheight = 0;
int startlow = Blood_y;
// temporizador de mercurio alto y bajo
Temporizador High Presstimer, LowPresstimer;
Public Blood () {
super ("Modelo de monitor de presión arterial personalizado-Freedoman");
this.setDefaultCloseOperation (EXIT_ON_CLOSE);
this.setBounds (300, 50, Canvas_Width, Canvas_Height + 20);
// Agregar control al norte del marco
Jpanel toppanel = new JPanel ();
this.add (Toppanel, BorderLayout.north);
HighPressText = new JTextField (5);
LowPressText = new JTextfield (5);
JButton PressButton = new JButton ("Show");
PressButton.addactionListener (new ActionListener () {
@Anular
public void Actionperformed (ActionEvent Arg0) {
HighPressInput = Integer.ParseInt (HighPressText.gettext ());
LowPressInput = Integer.ParseInt (LowPressText.gettext ());
ActionListener HighPressTaskperformer = new ActionListener () {
public void Actionperformed (ActionEvent EVT) {
// Aumente la altura en 1 píxel/0.01 y detenga el momento hasta que se cumplan los requisitos de entrada.
HighPressheight += 1;
BloodCanvas.Repaint ();
if (highpressheight == highpressinput * 2) {
HighPressTimer.stop ();
// El temporizador de columna de mercurio de baja presión está anidada dentro del temporizador de alta presión, en secuencia (primero a alta presión, luego baja presión)
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 ();
}
}
};
// Definir el oyente de eventos que ejecuta cada 0.01 segundos
HighPressTimer = nuevo temporizador (10, HighPressTaskperformer);
HighPressTimer.Start ();
}
});
toppanel.add (nuevo JLabel ("Valor de alto voltaje", jlabel.center));
toppanel.add (HighPressText);
toppanel.add (nuevo JLabel ("Valor de bajo voltaje", jlabel.center));
toppanel.add (LowPressText);
// toppanel.add (new JLabel ("frecuencia cardíaca", jlabel.center));
toppanel.add (PressButton);
// Agregar lienzo al área central
this.add (BloodCanvas, BorderLayout.Center);
this.setResizable (falso);
this.setVisible (verdadero);
}
/**
* Lienzo para volver a dibujar el medidor de presión arterial
*/
clase Mycanvas extiende lienzo {
Pinte de pintura pública (gráficos g) {
// dibujar bordes
G.SetColor (color.black);
G.Draw3Drect (Frame_X, Frame_y, Frame_Width, Frame_Height, verdadero);
// dibujar concha de vidrio
G.SetColor (color.orange);
G.Fill3drect (Blood_X, Blood_y, Blood_Width, Blood_height, verdadero);
// columna de mercurio de alta presión
G.SetColor (Color.Red);
G.Fill3drect (Blood_X, Zoreline_y - HighPressheight, Blood_Width,
HighPressheight, verdadero);
// columna de mercurio de baja presión a alta presión
G.SetColor (color.orange);
G.Fill3drect (Blood_x, Startlow, Blood_Width, LowPressheight, verdadero);
// Dibuja la bola de mercurio en la parte inferior
G.SetColor (Color.Red);
G.Filloval (Canvas_Width / 2 - 30, Zoreline_y - 5, 60, 60);
// La garrapata y las coordenadas de la línea de escala 0 a la derecha (la coordenada vertical de la línea de escala se cambia gradualmente por Line_y)
int RightStartDegree = 0;
int line_y = zoreline_y;
para (; line_y> blood_y; line_y -= 2) {
// 2 píxeles son un índice mínimo de 1 grado
G.SetColor (color.black);
G.Drawline (Zoreline_X, Line_y, Zoreline_X + line_length, line_y);
// Dibuje las garrapatas de 10 grados cada 10 índices mínimos
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;
}
}
// La garrapata y las coordenadas de la línea de escala 0 a la izquierda (la coordenada vertical de la línea de escala se cambia gradualmente por Line_y)
int
int Leftline_y = zoreline_y;
para (; Leftline_y> Blood_y; Leftline_y -= 6) {
// Los puntos de 6 píxeles son un índice mínimo de 1 grado
G.SetColor (color.black);
G.Drawline (Blood_X, Leftline_y, Blood_X - Line_length,
Leftline_y);
// Dibuje las garrapatas de 10 grados cada 10 índices mínimos
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;
}
}
}
/**
* Tecnología de doble almacenamiento doble: la velocidad de cálculo compleja es más lenta que la pantalla de la pantalla, y el búfer se utiliza para resolver el problema del parpadeo de la pantalla
*/
@Anular
Public void Update (Graphics g) {
if (ibuffer == null) {
ibuffer = createImage (this.getSize (). Ancho,
this.getSize (). Altura);
}
Graphics gbuffer = ibuffer.getGraphics ();
gbuffer.setColor (getBackground ());
gbuffer.fillrect (0, 0, this.getSize (). Ancho, this.getSize (). Height);
pintura (gbuffer);
gbuffer.dispose ();
G.DrawImage (Ibuffer, 0, 0, esto);
}
}
public static void main (string [] args) {
// Establecer la apariencia de la interfaz a la apariencia del sistema
intentar {
UiManager.setlookandFeel (uiManager.getSystemlookAndFeelClassName ());
} Catch (Exception e) {
E.PrintStackTrace ();
}
sangre nueva();
}
}