Кода -копия выглядит следующим образом:
Пакет GraphicsCanvas;
импортировать java.awt.borderlayout;
импортировать java.awt.canvas;
импортировать java.awt.color;
импортировать java.awt.graphics;
импортировать java.awt.image;
импортировать java.awt.event.actionevent;
импортировать java.awt.event.actionlistener;
Импорт javax.swing.jbutton;
импортировать javax.swing.jframe;
импортировать javax.swing.jlabel;
импортировать javax.swing.jpanel;
импортировать javax.swing.jtextfield;
импортировать javax.swing.timer;
Импорт javax.swing.uimanager;
/**
* Смоделированный измеритель артериального давления, высокое давление, низкое давление
*
* @Author FAN Junbin
* @Time 2013-12-10
*/
Кровь открытого класса распространяется jframe {
Частный статический конечный длинный SerialVersionuid = 1L;
частное изображение ibuffer;
Частный MyCanvas BloodCanvas = new MyCanvas ();
Private Jtextfield HighPresstext, Lowpressextext;
// Длина и ширина холста
Приватный финал int canvas_width = 400;
Приватный финал int canvas_height = 800;
// длина и ширина стеклянной оболочки и стартовые координаты
Частный конечный int blood_width = 30;
Частный конечный int blood_height = 650;
Приватный конечный int blood_x = canvas_width / 2 - blood_width / 2;
Частный конечный int blood_y = 50;
// размер кадра и начальные координаты
Приватный окончательный int frame_width = 120;
Приватный окончательный int frame_height = 720;
Приватный окончательный int frame_x = canvas_width / 2 - frame_width / 2;
Приватный финальный int frame_y = blood_y - 20;
// горизонтальные и вертикальные координаты и длина масштабной линии 0
Приватный финал int zoreline_y = blood_y + blood_height - 10;
Private Final int zoreline_x = canvas_width / 2 + blood_width / 2;
Приватный окончательный int line_length = 8;
// Ввод высокого напряжения и низкого напряжения
Частный int HighPressinput, LowpressiNput;
// Динамическая высота колонн ртути с высоким и низким давлением
int HighPressHeight = 0;
int lowpressheight = 0;
int startlow = blood_y;
// высокий и низкий таймер ртути
Таймер HighPresstimer, Lowpressytimer;
public blood () {
Super («Пользовательский монитор монитора артериального давления модели»);
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 ("show");
pressbutton.addactionListener (new ActionListener () {
@Override
public void actionperformed (actionEvent arg0) {
HighPressInput = integer.parseint (HighPressText.getText ());
lowpressinput = integer.parseint (lowpressextext.getText ());
ActionListener HighPressTaskPerformer = new ActionListener () {
public void actionperformed (actionevent evt) {
// Увеличьте высоту на 1 пиксель/0,01 с и остановите время, пока требования к вводу не будут выполнены.
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
- LowpressyNput * 2 - Startlow)
lowpressytimer.stop ();
}
};
LowpressyTimer = новый таймер (10, LowpressAskPerformer);
lowpressmenttimer.start ();
}
}
};
// определить слушатель событий, который выполняет каждые 0,01 секунды
HighPresstimer = новый таймер (10, HighPressTaskPerformer);
HighPresstimer.Start ();
}
});
toppanel.add (new jlabel («высокое значение напряжения», jlabel.center));
toppanel.add (HighPresstext);
toppanel.add (new jlabel ("низкое значение напряжения", jlabel.center));
TopPanel.Add (Lowpressextext);
// toppanel.add (new jlabel («частота сердечных сокращений», jlabel.center));
toppanel.add (Pressbutton);
// Добавить холст в центральную зону
this.add (bloodcanvas, borderlayout.center);
this.SetReSizable (false);
this.setvisible (true);
}
/**
* Перераспределение измерителя артериального давления в холсте
*/
класс MyCanvas расширяет холст {
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 (; Lealthline_y> blood_y; Lealthline_y -= 6) {
// 6 пиксельных точек являются минимальным индексом 1 градуса
g.setcolor (color.black);
g.drawline (blood_x, leftline_y, blood_x - line_length,
Leatsline_y);
// рисовать 10 градусов каждые 10 минимальных индексов
if (LeatsLine_y % 20 == 10) {
g.setcolor (color.blue);
g.drawline (blood_x, leftline_y, blood_x - line_length * 2,
Leatsline_y);
G.DrawString (LeftStArtDegree + "", Blood_x - line_length
* 4, Leatsline_y + 4);
LeftStartDegree += 10;
}
}
}
/**
* Технология двойной буферизации: сложная скорость расчета медленнее, чем дисплей экрана, и буферизация используется для решения проблемы мерцания экрана
*/
@Override
Обнаружение Public void (Graphics G) {
if (ibuffer == null) {
ibuffer = createImage (this.getSize (). ширина,
this.getSize (). Высота);
}
Graphics gbuffer = ibuffer.getGraphics ();
gbuffer.setcolor (getbackground ());
gbuffer.fillRect (0, 0, this.getSize (). ширина, this.getSize (). Высота);
краска (gbuffer);
gbuffer.dispose ();
g.drawimage (ibuffer, 0, 0, это);
}
}
public static void main (string [] args) {
// Установить внешний вид интерфейса на внешний вид системы
пытаться {
Uimanager.setlookandfeel (uimanager.getsystemlookandfeelclassname ());
} catch (Exception e) {
e.printstacktrace ();
}
Новая кровь ();
}
}