Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

javaでカレンダーを作っているのですが・・・

はじめまして。今javaでカレンダーを作っているのです
が、javaの勉強を始めたばかりなのでサンプルをネット
で拾ってきて、それに機能を付け加えようと思っていま
す。
その機能は西暦、月を入力するとそのカレンダーが表示
され、”次の月”、”前の月”というボタンを作りその
ボタンを押すとそれに応じた表示に切り替わる、という
ものです。
今、ボタンまで作れたのですがマウスイベントについて
分からなくて困っています。下記のプログラムだとどの
ように記述すればいいのでしょうか?

import java.awt.GridLayout;
import java.util.Calendar;
import javax.swing.*;
import java.util.Scanner;
import javax.swing.JButton;
import java.awt.event.*;


public class SampleCalendar extends JFrame 
implements ActionListener{
    
    JLabel[] dayLabel = new JLabel[54];
    
    public SampleCalendar(int YEAR, int MONTH){
        super(YEAR + "年" + MONTH + "月のカレンダ
ー");
        
        
        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 < 54; i++){
            dayLabel[i] = new JLabel("");
        }
        
        
        for(int i = 0; i < 54 ;i++){
            
dayLabel[i].setHorizontalAlignment(SwingConstants.C
ENTER);
        }
        
        
        Calendar calendar = Calendar.getInstance();
        calendar.set(YEAR, MONTH - 1, 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 + "");        
}
        
        setLayout(new GridLayout(9, 6));
        
        for(int i = 0; i < 54; i++){
            add(dayLabel[i]);
        }
    }
    
    public static void main(String a[]){
        System.out.println("西暦何年?");
        Scanner scan = new Scanner(System.in);
        int x = scan.nextInt();        
        
        
        System.out.println("何月?");
        int y = scan.nextInt();                
        
        
        SampleCalendar calendar = new 
SampleCalendar(x, y);
        JButton Button1 = new JButton("前の月");
        JButton Button2 = new JButton("次の月");        
        calendar.add(Button1);
        calendar.add(Button2);                
        Button1.addActionListener(this);
        Button2.addActionListener(this);

        
        
        
        
calendar.setDefaultCloseOperation(JFrame.EXIT_ON_CL
OSE);
        calendar.setSize(500, 400);
        calendar.setResizable(true);
        calendar.setVisible(true);
}
    public void actionPerformed(ActionEvent e) {
    if (e.getSource() == Button1) {
    
    
        
    }


最後のイベントリスナーの部分の記述が分からないで
す。初心者的な質問ではありますがよろしくお願いしま
す。

3

回答

5135

閲覧

3件の回答

評価

0

「始めたばかり」という言い方だとどんなもんか予想するしかないが、恐らく基礎の勉強はしてないか、さっさと済ませた状態で、サンプルを改造しようと思ってるんじゃないだろうか。

もしそうであれば、今やりたいことはいったん置いて、基礎からコツコツと取り組んだ方がいい。
どんなものでもそうだけど、基礎にどれだけ時間を掛けたかでその後の理解度が全然違ってくる。

評価

0

基礎からしているのですが、学校の課題なのでアドバイスを
頂けたらと思います。申し訳ありません。

評価

0

「アドバイスを」ということならいいけど、最初の書き込みだと(ガイドラインで触れられている)「分かりません」になってる。

基礎ができていないから、サンプルをどうしていいのか分からない。
ほとんどの人は、学校や研修で一通り聞いた程度では基礎を固めることはできない。
今回悩んでいる部分は、Swingという応用はあまり関係なく、基礎的な部分だ。

アドバイスとしては、「月ごとに変わる部分をコンストラクタに書かないこと」かな。
コンストラクタを含め、それぞれのメソッドが何のためにあるかを、把握していこう。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。