- 締切済み
javaでカレンダー
javaでカレンダーを作りたいのですが、 どなたかいい案があれば、教えていただけませんか? 初心者なのでCalendarクラスがよく理解できていません。 よろしくお願いします。j
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- foggi47
- ベストアンサー率87% (7/8)
例えば5月の分のカレンダーを作りたいのなら、始めの日の曜日だけわかればあとの曜日はひとつづつずれていくだけです。 描画のほうは始めに曜日を示すラベル(日月火~)だけ作っておき、あとは空白「""」をセットしておきます。 そして曜日に応じて、日付を入れていきます。たとえば月曜日から始まるなら、はじめの日曜日は空白で、次の月曜のところに1が入るようにします。その分だけ始まるラベルをずらしておきます。 言葉で言っても分かりにくいと思うのでサンプルを作ってみました。参考にしてみてください。分からなかったらまたご質問ください。 ****** import java.awt.GridLayout; import java.util.Calendar; import javax.swing.*; public class SampleCalendar extends JFrame{ JLabel[] dayLabel = new JLabel[42]; public SampleCalendar(int YEAR, int MONTH){ super(YEAR + "年" + MONTH + "月のカレンダー"); //dayLabelを初期化 dayLabel[0] = new JLabel("日"); dayLabel[1] = new JLabel("月"); dayLabel[2] = new JLabel("火"); dayLabel[3] = new JLabel("水"); dayLabel[4] = new JLabel("木"); dayLabel[5] = new JLabel("金"); dayLabel[6] = new JLabel("土"); for(int i = 7; i < 42; i++){ dayLabel[i] = new JLabel(""); } //文字をラベルの中央に配置 for(int i = 0; i < 42; i++){ dayLabel[i].setHorizontalAlignment(SwingConstants.CENTER); } //描画に必要な、始めの曜日と日数を取得 Calendar calendar = Calendar.getInstance(); calendar.set(YEAR, MONTH - 1, 1);//MONTHは一月が0、二月が1という風になってる int firstDay = calendar.get(Calendar.DAY_OF_WEEK); int dayCount = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); //始めの曜日に応じてカウンタを回す int k = 0; switch(firstDay){ case Calendar.SUNDAY: k += 0;break; case Calendar.MONDAY: k += 1;break; case Calendar.TUESDAY: k += 2;break; case Calendar.WEDNESDAY: k += 3;break; case Calendar.THURSDAY: k += 4;break; case Calendar.FRIDAY: k += 5;break; case Calendar.SATURDAY: k += 6;break; } for(int i = k; i < k + dayCount; i++){ dayLabel[i+7].setText(i - k + 1 + "");//ちょっと卑怯な方法だけどString型に変換 } setLayout(new GridLayout(6, 7)); for(int i = 0; i < 42; i++){ add(dayLabel[i]); } } public static void main(String a[]){ SampleCalendar calendar = new SampleCalendar(2008, 2); calendar.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); calendar.setSize(300, 250); calendar.setResizable(false); calendar.setVisible(true); } }
- foggi47
- ベストアンサー率87% (7/8)
どこがわからないのかよくわかりませんがCalendarクラスは日付・時刻を管理するのに使います。 方針は、 (1)欲しい月の1日目の曜日をCalendarクラスで取得 (Calendar calendar = Calendar.getInstance(); calendar.set(2008,5,1); int day = calendar.get(DAY_OF_WEEK);) (2)その月の日数を取得 (calendar.getActualMaximum(DAY_OF_MONTH);) (3)曜日と日数から描画 とすればできなくはないと思います。 カレンダーを作ったことがないのでわかりませんが、もっとスマートな方法があるかもしれません。 どこまでの説明が必要かわからないのでわからない点があればご質問ください。
お礼
返信の方大変遅れてしまい申し訳ありません。 こんな感じでやればできるのですね。ありがとうございます。 (3)の曜日と日数から描画を詳しく教えていただきたいのですが? (1)のソースはこれでカレンダーの最初の日をセットして、 DAY_OF_WEEKをゲットすると日を全て取得できるのですか? (Calendar calendar = Calendar.getInstance(); calendar.set(2008,5,1); int day = calendar.get(DAY_OF_WEEK);)