人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

javaでアナログ時計を作りましたが、数字が円にかくれてしまっています。
(数字が文字盤の後ろになってる状態です)
どうしたら治りますか?

public void number(Graphics g){

…省略…

g.setColor(Color.black);
for(int i = 1;i <= 12; i++){
String num=Integer.toString(i);
int cheight=fm.getHeight()/2;
int cwidth=fm.stringWidth(num);
int x=70+(int)(50*Math.cos(theta));
int y=70-(int)(50*Math.sin(theta));
g.drawString(num,x-cwidth/2,y+cheight/2);
theta -= anglespace;
}
}

public void update(Graphics g){

g.setColor(Color.gray);
g.fillOval(20,20,100,100);

g.setColor(Color.black);
double hra = 2 * Math.PI * (hour + min/60.0) / 12.0;
int hx = (int)(70+30 * Math.sin(hra));
int hy = (int)(70-30 * Math.cos(hra));
g.drawLine(70,70,hx,hy);

g.setColor(Color.blue);
double mra = 2 * Math.PI * min / 60.0;
int mx = (int)(70+30 * Math.sin(mra));
int my = (int)(70-30 * Math.cos(mra));
g.drawLine(70,70,mx,my);
}

public void paint(Graphics g){

number(g);
update(g);

}
}

以上のどこかがおかしいのだと思いますが…
ご指摘よろしくお願いします。

●質問者: Nana
●カテゴリ:コンピュータ 学習・教育
✍キーワード:Blue COLOR cos DOUBLE FM
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● ? ????<だ
ベストアンサー

提示されているJavaプログラムのpaintメソッドを見ると、描画の順は、

  1. numberメソッド上で時計の数字を描画
  2. updateメソッド内のGraphics#fillOvalメソッドで時計盤を塗りつぶし
  3. 時針の描画
  4. 分針の描画

になっているようです。

1→2の順に描画されているため、数字が時計盤の円に隠れているのではないかと思います。


numberメソッドをpaintメソッド上で呼び出すのではなく、updateメソッドにおける2の処理(g.fillOval)の後で呼び出すようにすることはできないでしょうか?

※numberメソッドの省略部分の内容が不明なので、実際に呼び出せるかは分かりませんが。

◎質問者からの返答

言われたとおりupdateの中で、時計盤塗りつぶしの後で

数字を描画したら、うまくいきました!

ありがとうございました^^

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ