La copie de code est la suivante:
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;
/ **
* Mémoire à pression artérielle simulée, haute pression, basse pression
*
* @author fan junbin
* @Time 2013-12-10
* /
La classe publique Blood étend JFrame {
Long SerialVersionUID privé statique statique = 1L;
image privée ibuffer;
MyCanvas privé BloodCanvas = new MyCanvas ();
privé jTextfield HighPressText, lowPressText;
// longueur et largeur de toile
private final int chant_width = 400;
private final int canvas_height = 800;
// la longueur et la largeur de la coque en verre et les coordonnées de départ
private final int sang_width = 30;
private final int sang_height = 650;
private final int blood_x = canvas_width / 2 - Blood_width / 2;
private final int blood_y = 50;
// Taille du cadre et coordonnées de démarrage
private final int frame_width = 120;
private final int came_height = 720;
private final int trame_x = canvas_width / 2 - frame_width / 2;
private final int frame_y = sang_y - 20;
// les coordonnées horizontales et verticales et la longueur de la ligne d'échelle 0
Final privé int zoreline_y = Blood_y + Blood_height - 10;
private final int zoreline_x = canvas_width / 2 + sang_width / 2;
private final int line_length = 8;
// Entrée haute tension et basse tension
private int highpressInput, lowPressInput;
// Hauteur dynamique des colonnes de mercure haute et basse pression
int highpressheight = 0;
int lowPressHeight = 0;
int startLow = Blood_y;
// minuteur de mercure élevé et bas
Timer HighPresstimer, LowPresstimer;
Blood public () {
Super ("moniteur de pression artérielle personnalisée modèle-liberté");
this.setDefaultCloseOperation (exit_on_close);
this.setbounds (300, 50, canvas_width, canvas_height + 20);
// Ajouter le contrôle au nord du cadre
Jpanel toppanel = new JPanel ();
this.add (toppanel, borderlayout.north);
highpressText = new JTextField (5);
LowPressText = new JTextField (5);
JBUTTON PRESSBUTTON = NOUVEAU JBUTTON ("Show");
pressbutton.addactionListener (new ActionListener () {
@Outrepasser
public void ActionPerformed (ActionEvent Arg0) {
HighPressInput = Integer.ParseInt (HighPressText.GetText ());
LowPressInput = Integer.ParseInt (LowPressText.GetText ());
ActionListener HighPressTaskperFormer = new ActionListener () {
public void ActionPerformed (ActionEvent evt) {
// Augmentez la hauteur de 1 pixel / 0,01 s et arrêtez le calendrier jusqu'à ce que les exigences d'entrée soient satisfaites.
HighPressHeight + = 1;
BloodCanvas.Repaint ();
if (highpressheight == highpressinput * 2) {
highpressTimer.stop ();
// La minuterie de colonne à basse pression est imbriquée à l'intérieur de la minuterie à haute pression, en séquence (haute pression d'abord, puis basse pression)
startLow = zoreline_y - HighPressHeight;
ActionListener LowPressTaskperformrer = new ActionListener () {
public void ActionPerformed (ActionEvent evt) {
LowPressHeight + = 1;
BloodCanvas.Repaint ();
if (lowPressHeight == zoreline_y
- LowPressInput * 2 - Startlow)
LowPressImer.stop ();
}
};
LowPressImer = Nouveau Timer (10, LowPressTaskperFormer);
LowPressImer.Start ();
}
}
};
// Définir l'auditeur d'événements qui exécute toutes les 0,01 secondes
HighPressTimer = Nouveau Timer (10, HighPressTaskperformrer);
highpresstimer.start ();
}
});
toppanel.add (new JLabel ("valeur haute tension", jlabel.center));
toppanel.add (highpressText);
toppanel.add (new JLabel ("valeur basse tension", jlabel.center));
toppanel.add (lowPressText);
// toppanel.add (new JLabel ("rate cardiaque", jlabel.center));
toppanel.add (Pressbutton);
// Ajouter une toile à la zone centrale
this.add (BloodCanvas, BorderLayout.Center);
this.setResiSable (false);
this.setVisible (true);
}
/ **
* Reprive sur toile du compteur de pression artérielle
* /
classe MyCanvas étend Canvas {
peinture publique vide (graphiques g) {
// dessine des frontières
g.setColor (color.black);
g.draw3Drect (frame_x, frame_y, frame_width, frame_height, true);
// dessiner la coque en verre
g.setColor (colore.orange);
G.Fill3Drect (Blood_X, Blood_Y, Blood_Width, Blood_height, True);
// Colonne de mercure à haute pression
g.setColor (Color.Red);
G.Fill3Drect (Blood_X, Zoreline_Y - HighPressHeight, Blood_Width,
Highpressheight, vrai);
// Colonne de mercure à haute pression à basse pression
g.setColor (colore.orange);
G.Fill3Drect (Blood_X, StartLow, Blood_Width, LowPressHeight, True);
// dessine la boule de mercure en bas
g.setColor (Color.Red);
G.Filloval (canvas_width / 2 - 30, zoreline_y - 5, 60, 60);
// La coche de départ et les coordonnées de la ligne d'échelle 0 à droite (la coordonnée verticale de la ligne d'échelle est progressivement modifiée par line_y)
int rightStartDegree = 0;
int line_y = zoreline_y;
pour (; line_y> sang_y; line_y - = 2) {
// 2 pixels sont un indice minimum de 1 degré
g.setColor (color.black);
g.drawline (zoreline_x, line_y, zoreline_x + line_length, line_y);
// dessine des tiques à 10 degrés tous les 10 index minimaux
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 coche de départ et les coordonnées de la ligne d'échelle 0 à gauche (la coordonnée verticale de la ligne d'échelle est progressivement modifiée par line_y)
int LeftStartDegree = 0;
int Leftline_y = zoreline_y;
pour (; Leftline_y> Blood_y; Leftline_y - = 6) {
// 6 pixels Les points sont un indice minimum de 1 degré
g.setColor (color.black);
G.Drawline (Blood_X, Leftline_Y, Blood_X - Line_Length,
Leftline_y);
// dessine des tiques à 10 degrés tous les 10 index minimaux
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;
}
}
}
/ **
* Technologie de double tampon: la vitesse de calcul complexe est plus lente que l'affichage d'écran, et la mise en mémoire tampon est utilisée pour résoudre le problème du scintillement d'écran
* /
@Outrepasser
Mise à jour du public (graphiques G) {
if (ibuffer == null) {
iBuffer = CreateImage (this.getSize (). Largeur,
this.getSize (). hauteur);
}
Graphiques gbuffer = ibuffer.getGraphics ();
gbuffer.setColor (GetBackground ());
gbuffer.fillrect (0, 0, this.getSize (). largeur, this.getSize (). hauteur);
peinture (gbuffer);
gbuffer.dispose ();
G.DrawImage (ibuffer, 0, 0, ceci);
}
}
public static void main (String [] args) {
// Définit l'apparence de l'interface sur l'apparence du système
essayer {
Uimanager.setLookAndFeel (uiManager.getSystemLookAndFeelClassName ());
} catch (exception e) {
e.printStackTrace ();
}
New Blood ();
}
}