Salinan kode adalah sebagai berikut:
paket graphicscanvas;
impor java.awt.borderlayout;
impor java.awt.canvas;
impor java.awt.color;
impor java.awt.graphics;
impor java.awt.image;
impor java.awt.event.actionevent;
impor java.awt.event.actionlistener;
impor javax.swing.jbutton;
impor javax.swing.jframe;
impor javax.swing.jlabel;
impor javax.swing.jpanel;
impor javax.swing.jtextfield;
impor javax.swing.timer;
impor javax.swing.uimanager;
/**
* Simulasi meter tekanan darah, tekanan tinggi, tekanan rendah
*
* @author fan junbin
* @Time 2013-12-10
*/
Darah kelas publik memperluas jframe {
private static final long serialversionuid = 1L;
gambar pribadi iBuffer;
pribadi mycanvas Bloodcanvas = myCanvas baru ();
Private JTextField HighPressText, LowPressText;
// panjang dan lebar kanvas
private final int canvas_width = 400;
private final int canvas_height = 800;
// Panjang dan lebar cangkang kaca dan koordinat awal
Private Final Int Blood_width = 30;
Private Final Int Blood_height = 650;
private final int hood_x = canvas_width / 2 - Blood_width / 2;
Private Final Int Blood_y = 50;
// ukuran bingkai dan koordinat awal
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;
// Koordinat horizontal dan vertikal dan panjang garis skala 0
private final int zoreline_y = darah_y + darah_height - 10;
private final int zoreline_x = canvas_width / 2 + Blood_width / 2;
private final int line_length = 8;
// Masukkan tegangan tinggi dan tegangan rendah
private int highpressInput, lowpressInput;
// Tinggi dinamis kolom merkuri tekanan tinggi dan rendah
int highpressheight = 0;
int lowpressheight = 0;
int startLow = Blood_y;
// Pengatur Waktu Merkuri Tinggi dan Rendah
Timer highpresstimer, lowpresstimer;
darah publik () {
Super ("Model Monitor Tekanan Darah Kustom-Freedoman");
this.setDefaultCloseOperation (exit_on_close);
this.setbounds (300, 50, canvas_width, canvas_height + 20);
// Tambahkan kontrol di utara kerangka kerja
Jpanel toppanel = jpanel baru ();
this.add (Toppanel, borderlayout.north);
HighPressText = JTextField baru (5);
LowPressText = JTextField baru (5);
Jbutton pressButton = jbutton baru ("show");
PressButton.AddactionListener (ActionListener baru () {
@Mengesampingkan
public void actionPerformed (actionEvent arg0) {
highpressInput = integer.parseint (highpresstext.getText ());
lowpressInput = integer.parseint (lowpresstext.getText ());
ActionListener HighPressTaskPerformer = new ActionListener () {
public void actionPerformed (actionEvent evt) {
// Tingkatkan ketinggian dengan 1 piksel/0,01s, dan hentikan waktu sampai persyaratan input dipenuhi.
HighpressHeight += 1;
Bloodcanvas.repaint ();
if (highpressheight == highpressInput * 2) {
highpresstimer.stop ();
// Pengatur waktu kolom merkuri bertekanan rendah bersarang di dalam timer bertekanan tinggi, secara berurutan (tekanan tinggi pertama, kemudian bertekanan rendah)
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 = timer baru (10, lowpresstaskperformer);
lowpresstimer.start ();
}
}
};
// Tentukan pendengar acara yang mengeksekusi setiap 0,01 detik
highpresstimer = timer baru (10, highpresstaskperformer);
highpresstimer.start ();
}
});
toppanel.add (jlabel baru ("nilai tegangan tinggi", jlabel.center));
toppanel.add (highpressText);
toppanel.add (jlabel baru ("nilai tegangan rendah", jlabel.center));
toppanel.add (lowpressText);
// toppanel.add (Jlabel baru ("detak jantung", jlabel.center));
toppanel.add (pressButton);
// tambahkan kanvas ke area pusat
this.add (Bloodcanvas, borderlayout.center);
this.setresizable (false);
this.setVisible (true);
}
/**
* Kanvas menggambar ulang meteran tekanan darah
*/
kelas myCanvas memperluas kanvas {
public void cat (grafik g) {
// Gambar perbatasan
G.SetColor (Color.Black);
g.draw3drect (frame_x, frame_y, frame_width, frame_height, true);
// Gambarlah cangkang kaca
G.SetColor (Color.ORANGE);
g.fill3drect (Blood_x, Blood_y, Blood_width, Blood_height, true);
// kolom merkuri tekanan tinggi
G.SetColor (Color.Red);
G.Fill3Drect (Blood_x, Zoreline_y - HighpressHeight, Blood_width,
HighpressHeight, True);
// kolom merkuri tekanan tinggi tekanan rendah
G.SetColor (Color.ORANGE);
G.Fill3Drect (Blood_X, StartLow, Blood_width, LowpressHeight, True);
// Gambarlah bola merkuri di bagian bawah
G.SetColor (Color.Red);
g.filloval (canvas_width / 2 - 30, zoreline_y - 5, 60, 60);
// Centang awal dan koordinat dari garis skala 0 di sebelah kanan (koordinat vertikal garis skala secara bertahap diubah oleh line_y)
int rightStartDegree = 0;
int line_y = zoreline_y;
for (; line_y> Blood_y; line_y -= 2) {
// 2 piksel adalah indeks minimum 1 derajat
G.SetColor (Color.Black);
G.Drawline (Zoreline_x, line_y, zoreline_x + line_length, line_y);
// Gambar kutu 10 derajat setiap 10 indeks minimum
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;
}
}
// Centang awal dan koordinat dari garis skala 0 di sebelah kiri (koordinat vertikal garis skala secara bertahap diubah oleh line_y)
int leftstartdegree = 0;
int leftline_y = zoreline_y;
for (; leftline_y> Blood_y; leftline_y -= 6) {
// 6 poin piksel adalah indeks minimum 1 derajat
G.SetColor (Color.Black);
G.Drawline (Blood_x, Leftline_y, Blood_x - line_length,
leftline_y);
// Gambar kutu 10 derajat setiap 10 indeks minimum
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;
}
}
}
/**
* Teknologi buffering ganda: Kecepatan perhitungan yang kompleks lebih lambat dari tampilan layar, dan buffering digunakan untuk menyelesaikan masalah berkedip layar
*/
@Mengesampingkan
Pembaruan public void (grafik g) {
if (iBuffer == null) {
iBuffer = createImage (this.getsize (). width,
this.getSize (). tinggi);
}
Grafik gbuffer = iBuffer.getGraphics ();
gbuffer.setColor (getBackground ());
gbuffer.fillrect (0, 0, this.getsize (). width, this.getsize (). tinggi);
cat (gbuffer);
gbuffer.dispose ();
G.DrawImage (ibuffer, 0, 0, ini);
}
}
public static void main (string [] args) {
// Atur penampilan antarmuka ke penampilan sistem
mencoba {
Uimanager.setLookandFeel (uimanager.getsystemLookandFeelClassName ());
} catch (Exception e) {
e.printstacktrace ();
}
darah baru ();
}
}