Die Codekopie lautet wie folgt:
Paket GraphicsCanvas;
Import Java.awt.BorderLayout;
import Java.awt.canvas;
Import Java.awt.Color;
importieren java.awt.graphics;
import Java.awt.image;
import Java.awt.event.ActionEvent;
import Java.awt.event.ActionListener;
import Javax.swing.jbutton;
importieren javax.swing.jframe;
import Javax.swing.jlabel;
import Javax.swing.jpanel;
importieren javax.swing.jtextfield;
import Javax.swing.timer;
import Javax.swing.uimanager;
/**
* Simulierter Blutdruckmesser, hoher Druck, niedriger Druck
*
* @Author Fan Junbin
* @Time 2013-12-10
*/
Das Blut der öffentlichen Klasse erweitert JFrame {
private statische endgültige lange Serialversionuid = 1L;
privates Bild Ibuffer;
private mycanvas bloodcanvas = new mycanvas ();
private JTextField HighPressText, LowPressText;
// Länge und Breite der Leinwand
private endgültige int canvas_width = 400;
private endgültige int canvas_height = 800;
// Die Länge und Breite der Glasschale und der Startkoordinaten
private endgültige int blood_width = 30;
private final int blood_height = 650;
Private Final int blood_x = canvas_width / 2 - blood_width / 2;
private endgültige int blood_y = 50;
// Rahmengröße und Startkoordinaten
private endgültige int Frame_width = 120;
private endgültige int Frame_Height = 720;
private endgültige int Fram_x = canvas_width / 2 - Frame_width / 2;
private endgültige int Frame_y = blood_y - 20;
// die horizontalen und vertikalen Koordinaten und Länge der 0 -Skalierungslinie
Private Final int zoreline_y = blood_y + blood_height - 10;
private final int zoreline_x = canvas_width / 2 + blood_width / 2;
private endgültige int line_length = 8;
// Hochspannung und niedrige Spannung eingeben
privat int highpressInput, lowpressInput;
// Dynamische Höhe von Quecksilbersäulen mit hohem und niedrigem Druck
int highpressHeight = 0;
int lowpressHeight = 0;
int startlow = blood_y;
// Timer mit hohem und niedrigem Quecksilber
Timer HighpressTime, LowpressTime;
public blood () {
Super ("benutzerdefinierte Blutdruckmonitormodell-Freedoman");
this.setDefaultCloseOperation (exit_on_close);
this.setBounds (300, 50, Canvas_Width, Canvas_Height + 20);
// Fügen Sie die Kontrolle im Norden des Frameworks hinzu
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 () {
@Override
public void actionperformed (actionEvent arg0) {
highpressInput = integer.parseInt (HighPressText.getText ());
LowPressInput = Integer.ParseInt (LowPressText.Getext ());
ActionListener HighpressTaskPerformer = new ActionListener () {
public void actionperformed (actionEvent evt) {
// Erhöhen Sie die Höhe um 1 Pixel/0,01 und stoppen Sie den Zeitpunkt, bis die Eingangsanforderungen erfüllt sind.
HighpressHeight += 1;
Bloodcanvas.Repaint ();
if (highpressHeight == highpressInput * 2) {
highpresstime.stop ();
// Der Timer mit niedrigem Druck in Quecksilber ist im Folgenden im Hochdruck-Timer verschachtelt (zuerst Hochdruck, dann Tiefdruck)
startlow = zoreline_y - highpressheight;
ActionListener lowStaskPerformer = new ActionListener () {
public void actionperformed (actionEvent evt) {
LowPressHeight += 1;
Bloodcanvas.Repaint ();
if (LowPressHeight == Zoreline_y
- LowpressInput * 2 - Startlow)
LowpressTime.Stop ();
}
};
lowpressTime = neuer Timer (10, LowpressTaskPerformer);
LowpressTime.start ();
}
}
};
// Ereignishörer definieren, der alle 0,01 Sekunden ausführt
highpressTime = neuer Timer (10, HighpressTaskPerformer);
highpresstime.start ();
}
});
toppanel.add (New JLabel ("Hochspannungswert", Jlabel.Center));
toppanel.add (HighPressText);
toppanel.add (New JLabel ("niedriger Spannungswert", JLabel.Center));
toppanel.add (lowpressText);
// toppanel.add (New Jlabel ("Herzfrequenz", Jlabel.Center));
toppanel.add (PressButton);
// Leinwand in den zentralen Bereich hinzufügen
this.add (Bloodcanvas, BorderLayout.Center);
this.setResizable (falsch);
this.setvisible (true);
}
/**
* Leinwand neu zeichnen des Blutdruckmessers
*/
Klasse mycanvas erweitert Leinwand {
public void Paint (Grafik g) {
// Grenzen zeichnen
g.setColor (color.black);
g.Draw3Dect (Frame_x, Frame_Y, Frame_Width, Frame_Height, True);
// Glasschale zeichne
G.SetColor (color.orange);
G.Fill3DRECT (Blood_x, Blood_y, Blood_Width, Blood_Height, True);
// Hochdruck -Quecksilbersäule
G.SetColor (color.red);
G.Fill3Drect (Blood_x, Zoreline_y - HighpressHeight, Blood_width,
HighpressHeight, wahr);
// Hochdruck mit niedrigem Druck Quecksilbersäule
G.SetColor (color.orange);
G.Fill3Drect (Blood_x, Startlow, Blood_width, LowpressHeight, True);
// Zeichne den Quecksilberball unten
G.SetColor (color.red);
G.Filloval (canvas_width / 2 - 30, zoreline_y - 5, 60, 60);
// Die Startetick und die Koordinaten der 0 -Skala -Zeile rechts (die vertikale Koordinate der Skalierungslinie wird nach line_y nach und nach geändert)
int rightStartDegree = 0;
int line_y = zoreline_y;
for (; line_y> blood_y; line_y -= 2) {
// 2 Pixel sind ein Mindestindex von 1 Grad
g.setColor (color.black);
g.drawline (zoreline_x, line_y, zoreline_x + line_length, line_y);
// Zeichnen Sie 10-Grad-Zecken alle 10 Mindestindizes
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;
}
}
// Die Startetick und die Koordinaten der 0 -Skala -Zeile links (die vertikale Koordinate der Skala -Linie wird nach und nach durch line_y geändert)
int linksStartDegree = 0;
int links line_y = zoreline_y;
for (; links line_y> blood_y; linke line_y -= 6) {
// 6 Pixelpunkte sind ein Mindestindex von 1 Grad
g.setColor (color.black);
g.drawline (blood_x, linke line_y, blood_x - line_length,
linke line_y);
// Zeichnen Sie 10-Grad-Zecken alle 10 Mindestindizes
if (links line_y % 20 == 10) {
G.SetColor (color.Blue);
g.drawline (blood_x, links line_y, blood_x - line_length * 2,
linke line_y);
g.drawstring (linke startDegree + "", blood_x - line_length
* 4, linke line_y + 4);
linke startDegree += 10;
}
}
}
/**
* Doppelpuffertechnologie: Komplexe Berechnungsgeschwindigkeit ist langsamer als Bildschirmanzeige, und Pufferung wird verwendet, um das Problem des Bildschirmflackerns zu lösen
*/
@Override
public void Update (Grafik g) {
if (ibuffer == null) {
Ibuffer = CreateImage (this.getSize (). Breite,
this.getSize (). Höhe);
}
Graphics gbuffer = Ibuffer.getGraphics ();
gbuffer.setColor (Getbackground ());
gBuffer.FillRect (0, 0, this.getSize (). Breite, this.getSize (). Höhe);
Farbe (gbuffer);
gbuffer.dispon ();
g.drawimage (Ibuffer, 0, 0, dies);
}
}
public static void main (String [] args) {
// Stellen Sie das Erscheinungsbild der Schnittstelle auf das System aus
versuchen {
Uimanager.setlookandfeel (uimanager.getSystemLookandFeelClassName ());
} catch (Ausnahme e) {
E. printstacktrace ();
}
neues Blut ();
}
}