コードコピーは次のとおりです。
パッケージ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ファンジャンビン
* @Time 2013-12-10
*/
パブリッククラスの血液はjframeを拡張します{
private static final long serialversionuid = 1l;
プライベートイメージibuffer;
private mycanvas bloodcanvas = new mycanvas();
Private JTextField HighPressText、LowPressText;
//キャンバスの長さと幅
プライベートファイナル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;
プライベートファイナル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、Lowpresstimer;
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(){
@オーバーライド
public void actionperformed(actionevent arg0){
highpressinput = integer.parseint(highpresstext.getText());
lowpressinput = integer.parseint(lowpresstext.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
-lowpressinput * 2- startlow)
lowpresstimer.stop();
}
};
lowpresstimer = new Timer(10、lowpresstaskperformer);
lowpresstimer.start();
}
}
};
// 0.01秒ごとに実行されるイベントリスナーを定義します
highpresstimer = new Timer(10、highpresstaskperformer);
highpresstimer.start();
}
});
toppanel.add(new Jlabel( "高電圧値"、jlabel.center));
toppanel.add(highpresstext);
toppanel.add(new Jlabel( "低電圧値"、jlabel.center));
toppanel.add(lowpresstext);
// toppanel.add(new Jlabel( "心拍数、jlabel.center));
toppanel.add(pressbutton);
//中央エリアにキャンバスを追加します
this.add(bloodcanvas、borderlayout.center);
this.SetSizable(false);
this.setVisible(true);
}
/**
*血圧計のキャンバスの再描画
*/
クラスmycanvasはキャンバスを拡張します{
public void paint(グラフィック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(; leftline_y> blood_y; leftline_y- = 6){
// 6ピクセルポイントは1度の最小インデックスです
g.setcolor(color.black);
g.drawline(blood_x、leftline_y、blood_x -line_length、
leftline_y);
// 10度の最小インデックスごとに10度のティックを描画します
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;
}
}
}
/**
*ダブルバッファリングテクノロジー:複雑な計算速度は画面ディスプレイよりも遅く、バッファリングを使用してスクリーンのちらつきの問題を解決します
*/
@オーバーライド
public void update(グラフィックG){
if(ibuffer == null){
ibuffer = createimage(this.getSize()。width、
this.getSize()。高さ);
}
Graphics gbuffer = ibuffer.getGraphics();
gbuffer.setcolor(getBackground());
gbuffer.fillrect(0、0、this.getSize()。width、this.getSize()。height);
ペイント(gbuffer);
gbuffer.dispose();
G.drawimage(ibuffer、0、0、this);
}
}
public static void main(string [] args){
//インターフェイスの外観をシステムの外観に設定します
試す {
uimanager.setlookandfeel(uimanager.getsystemlookandfeelclassname());
} catch(例外e){
e.printstacktrace();
}
new Blood();
}
}