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);

}
}

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

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2011/08/10 01:12:24

ベストアンサー

id:daichan330 No.1

回答回数565ベストアンサー獲得回数106

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

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

になっているようです。

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


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

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

id:WINDof5296fly

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

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

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

2011/08/10 01:13:20

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません