アプリ版:「スタンプのみでお礼する」機能のリリースについて

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


}
}

「Javaを使ってデジタル時計を作りたいで」の質問画像

A 回答 (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;
}
}
}
    • good
    • 0
この回答へのお礼

うまくいきました!
よくわかりませんが、
padding↓
http://www.mars.dti.ne.jp/~torao/program/general …
と呼ばれるもので、0を埋めるのですね。
「pad0」とはその機能があるそうで(^_^;)
いやはや助かりました、ありがとうございます<m(__)m>

お礼日時:2009/11/07 17:28

とりあえず、行い事は以下の様な内容だろうと想像します。


コツとしては、時刻のフォーマットは別の場所で作成しましょう。
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());
}

}

この回答への補足

ありがとうございます!
HarukaV49さんが書いてくださったコードを参考に、書きなおしてみます!!

補足日時:2009/11/05 02:29
    • good
    • 0
この回答へのお礼

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メソッドを用いて型を変更する」といったことを習ったのですが、それを使用しなくても描けるんですね・・・( ゜д゜)

お礼日時:2009/11/07 17:17

「変数 s は何のためにあるのですか?」というより前に、変数 s に何を入れようとしているのですか?とお尋ねしたいです。

そもそも「月」って・・・(汗)
s = "hour_of_day+月+min+分+sec+秒";
ではなく、せめて
s = hour_of_day+"時"+min+"分"+sec+"秒";
ならまだ判るのですが。

数字の0埋めの方法は参考URLなどをご参照ください。

参考URL:http://mitv2.net/algorithm/padding.html
    • good
    • 0
この回答へのお礼

すいません寝ぼけていました、"月"ではなく"時"です(>_<)
ただ、「s = hour_of_day+"時"+min+"分"+sec+"秒";」と、osu_neko09さんがおっしゃるように書きなおしてみたのですが、やっぱりうまく表示されません(ToT)
http://onnsei-okiba.radilog.net/article/477034.h …

"02時04分34秒"と表示させるには、osu_neko09さんが教えてくださったリンク先によると「一文字づつ連結」「文字列の自己連結」「文字列の自己連結2」「System.arraycopy」という4つの方法があるそうなのですが、具体的なコード例のようなものはないでしょうか?

専門用語が多すぎて、4つの方法をどうコードに反映したらいいのかわからないのです(;_;)

いろいろワガママ言ってしまってすいません。
もしosu_neko09さんのお気が向かれましたら、再度ご回答よろしくお願いします<m(__)m>

お礼日時:2009/11/05 02:28

たぶん, 現状で「なぜ求めているように表示できないのか」を考えた方がいいような気はするけど, 変数 s は何のためにあるのですか?

    • good
    • 0
この回答へのお礼

回答ありがとうございます!
変数sがある理由なのですが、文字列を表示させる「Stringクラス」と呼ばれるものを使用したつもりなのですが・・・間違っているでしょうか!?

お礼日時:2009/11/05 02:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!