- ベストアンサー
Javaを使ってデジタル時計を作りたいです。時、分、秒も表示させたいです。
Javaの勉強をしている初心者の者です。 Eclipseを使ってデジタル時計を作ろうと試みているのですが、どうしても"●●時●●分●●秒"というように、表示させることができません(;_;) また、時刻は16時台になっていますが、深夜1時とかにアプレットを作動させると、"10235"というように、5桁で表記されてしまいます。 "010235"のように、6桁で時刻を表示させることができません(;_;) 私が書いたコードのどこを修正すれば、6桁の時刻で、なおかつ、時、分、秒も入ったデジタル時計を表示できるのか、教えていただければ幸いです(>_<) よろしくお願いします<m(__)m> import java.awt.*; import java.applet.*; import java.util.*; public class digital_clock extends Applet{ public void paint(Graphics g){ int hour_of_day, min, sec; Calendar cal = Calendar.getInstance(); hour_of_day = cal.get(Calendar.HOUR_OF_DAY ); min = cal.get(Calendar.MINUTE); sec = cal.get(Calendar.SECOND); String s; s = "hour_of_day+月+min+分+sec+秒"; g.setFont(new Font("SansSerif", Font.PLAIN, 60)); g.drawString(Integer.toString(hour_of_day), 20, 50); g.drawString(Integer.toString(min), 85, 50); g.drawString(Integer.toString(sec), 150, 50); } }
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#2です。 #1さんの指摘されているのは、「sは代入されているだけで使用されていない」ということなのですが。 0埋めに関しては、参考URLの方法のひとつをコピーしてくればよかったのですが、まあこういう時刻の場合には1桁か2桁というのが判りきっていますので、単純に1桁の場合には頭0を補うという方法でもよろしいかと。 import java.awt.*; import java.applet.*; import java.util.*; public class digital_clock extends Applet{ public void paint(Graphics g){ int hour_of_day, min, sec; Calendar cal = Calendar.getInstance(); hour_of_day = cal.get(Calendar.HOUR_OF_DAY ); min = cal.get(Calendar.MINUTE); sec = cal.get(Calendar.SECOND); String s; s = pad0(hour_of_day)+"時"+pad0(min)+"分"+pad0(sec)+"秒"; g.setFont(new Font("SansSerif", Font.PLAIN, 60)); g.drawString(s, 20, 50); } String pad0(int val){ if(val<10){ return "0"+val; }else{ return ""+val; } } }
その他の回答 (3)
- HarukaV49
- ベストアンサー率53% (48/89)
とりあえず、行い事は以下の様な内容だろうと想像します。 コツとしては、時刻のフォーマットは別の場所で作成しましょう。 paint(Graphics g) メソッド内には、描画関連処理しか書かないということです。 import java.applet.Applet; import java.awt.Font; import java.awt.Graphics; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Locale; /** * デジタル時計を描画します。 * 現状、自動更新はされません。 * @author HarukaV49 */ public class DigitalClock extends Applet{ /** * @see java.awt.Container#paint(java.awt.Graphics) */ @Override public void paint(Graphics g){ super.paint(g); g.setFont(new Font("SansSerif", Font.PLAIN, 60)); g.drawString( format(Calendar.getInstance(), "HH時mm分ss秒"), 20, 50 ); } /** * カレンダーにフォーマットを設定します。 * @param calendar カレンダー * @param pattern 書式文字列 * @return 書式付けした日付 */ public static String format( Calendar calendar, String pattern ) { return format( calendar, pattern, Locale.JAPAN ); } /** * カレンダーにフォーマットを設定します。 * @param calendar カレンダー * @param pattern 書式文字列 * @param locale ロケール * @return 書式付けした日付 */ public static String format( Calendar calendar, String pattern, Locale locale ) { DateFormat df = new SimpleDateFormat(pattern, locale ); df.setTimeZone( calendar.getTimeZone() ); return df.format(calendar.getTime()); } }
お礼
import java.applet.Applet; import java.awt.Font; import java.awt.Graphics; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Locale; public class digital_clock extends Applet{ public void paint(Graphics g){ super.paint(g); g.setFont(new Font("SansSerif", Font.PLAIN, 60)); g.drawString( format(Calendar.getInstance(), "HH時mm分ss秒"), 20, 50 ); } public static String format( Calendar calendar, String pattern ) { return format( calendar, pattern, Locale.JAPAN ); } public static String format( Calendar calendar, String pattern, Locale locale ) { DateFormat df = new SimpleDateFormat(pattern, locale ); df.setTimeZone( calendar.getTimeZone() ); return df.format(calendar.getTime()); } } ありがとうございます、HarukaV49さんのコードでうまくいきました。 「getInstanceメソッドによって返される値はint型なので、int型からString型への変換が必要。そこで、Integer.toStringメソッドを用いて型を変更する」といったことを習ったのですが、それを使用しなくても描けるんですね・・・( ゜д゜)
補足
ありがとうございます! HarukaV49さんが書いてくださったコードを参考に、書きなおしてみます!!
- osu_neko09
- ベストアンサー率48% (56/115)
「変数 s は何のためにあるのですか?」というより前に、変数 s に何を入れようとしているのですか?とお尋ねしたいです。そもそも「月」って・・・(汗) s = "hour_of_day+月+min+分+sec+秒"; ではなく、せめて s = hour_of_day+"時"+min+"分"+sec+"秒"; ならまだ判るのですが。 数字の0埋めの方法は参考URLなどをご参照ください。
お礼
すいません寝ぼけていました、"月"ではなく"時"です(>_<) ただ、「s = hour_of_day+"時"+min+"分"+sec+"秒";」と、osu_neko09さんがおっしゃるように書きなおしてみたのですが、やっぱりうまく表示されません(ToT) http://onnsei-okiba.radilog.net/article/477034.html "02時04分34秒"と表示させるには、osu_neko09さんが教えてくださったリンク先によると「一文字づつ連結」「文字列の自己連結」「文字列の自己連結2」「System.arraycopy」という4つの方法があるそうなのですが、具体的なコード例のようなものはないでしょうか? 専門用語が多すぎて、4つの方法をどうコードに反映したらいいのかわからないのです(;_;) いろいろワガママ言ってしまってすいません。 もしosu_neko09さんのお気が向かれましたら、再度ご回答よろしくお願いします<m(__)m>
- Tacosan
- ベストアンサー率23% (3656/15482)
たぶん, 現状で「なぜ求めているように表示できないのか」を考えた方がいいような気はするけど, 変数 s は何のためにあるのですか?
お礼
回答ありがとうございます! 変数sがある理由なのですが、文字列を表示させる「Stringクラス」と呼ばれるものを使用したつもりなのですが・・・間違っているでしょうか!?
お礼
うまくいきました! よくわかりませんが、 padding↓ http://www.mars.dti.ne.jp/~torao/program/general/portability.html と呼ばれるもので、0を埋めるのですね。 「pad0」とはその機能があるそうで(^_^;) いやはや助かりました、ありがとうございます<m(__)m>