-1
import javax.swing.*;
import javax.swing.text.DateFormatter;
import java.awt.*;
import java.awt.event.*;
import java.text.SimpleDateFormat;
import java.util.GregorianCalendar;

 public class Calendar extends JFrame implements ActionListener {
private JButton Next, Previous;
private JLabel CurrDate,Time;
private JLabel Days[];
private JButton [] dayButtons;
private JPanel P1,P2,P3,P4,P5;
private int year , month , day ,ch;
String S1;
GregorianCalendar GC=new GregorianCalendar();;
int DayOfWeek=GC.get(GC.DAY_OF_WEEK);

Color c = new Color(169,97,182);
Color c2 = new Color(241,233,241);
String[] months =  {"January", "February", "March", "April", "May", "June", "July",    "August", "September", "October", "November", "December"};
Calendar()
{        
    super( "Calendar" );

    year = GC.get(GC.YEAR);
    month = GC.get(GC.MONTH);
    day = GC.get(GC.DATE);


    Previous = new JButton ("<<");
    Previous.setBackground(Color.LIGHT_GRAY);
    Previous.addActionListener(this);
    Next = new JButton (">>");
    Next.setBackground(Color.LIGHT_GRAY);
    Next.addActionListener(this);

    CurrDate = new JLabel ("                   "+ months[month]+"        "+year+"               ");
    CurrDate.setForeground(Color.WHITE);
    CurrDate.setFont(new Font ("Serif",Font.ITALIC+Font.BOLD,15));
    CurrDate.setAlignmentX(CENTER_ALIGNMENT);
    Days = new JLabel[7];
    Days[0] = new JLabel ("Sun         ");
    Days[1] = new JLabel ("Mon         ");
    Days[2] = new JLabel ("Tue         ");
    Days[3] = new JLabel ("Wed         ");
    Days[4] = new JLabel ("Thu         ");
    Days[5] = new JLabel ("Fri            ");
    Days[6] = new JLabel ("Sat         ");
    for(JLabel l : Days)
    {
        l. setForeground(Color.WHITE);
        l.setAlignmentX(LEFT_ALIGNMENT);
    }
    Time = new JLabel ();
    Time.setText(GC.get(GC.HOUR)+":"+GC.get(GC.MINUTE)+":"+GC.get(GC.SECOND));
    Time.setForeground(Color.WHITE);
    if( month ==0 || month ==2 || month == 4 || month ==6 || month==7 || month ==9 || month ==11)
    {
        ch = 1;
    }
    else
    {
        ch = 2;
    }

    P1 = new JPanel();
    P2 = new JPanel();
    P3 = new JPanel();
    P4 = new JPanel();
    P5 = new JPanel();
    P5.setLayout(new BorderLayout());
    P1.add(Previous); 
    P1.add(CurrDate);   
    DrawCalendar(DayOfWeek,year,month);
    P1.add(Next);
    P2.add(Days[0]);
    P2.add(Days[1]);
    P2.add(Days[2]);
    P2.add(Days[3]);
    P2.add(Days[4]);
    P2.add(Days[5]);
    P2.add(Days[6]);

    P4.add(Time);
    P1.setBackground(c);
    P2.setBackground(c);
    P4.setBackground(c);

    P5.add (P1, BorderLayout.NORTH);
    P5.add (P2, BorderLayout.CENTER);
    add (P5,BorderLayout.NORTH);
    add (P3, BorderLayout.CENTER);
    add (P4, BorderLayout.SOUTH);
    }

private void DrawCalendar(int DayOfWeek, int year, int month) {
    P3.setLayout( new GridLayout(7,7,3,3));
    dayButtons = new JButton [49];


    if(DayOfWeek == 1 && ch ==1)
    {
        for ( int i = 0; i < 31; i++ )
         { dayButtons[ i ] = new JButton(  i+1 +"" ); 
         P3.add( dayButtons[ i ] );
         dayButtons[i].addActionListener(this);
         dayButtons[i].setBackground(c2);
         } 
        for ( int i = 31; i < 49; i++ )
         { dayButtons[ i ] = new JButton( "" ); 
         P3.add( dayButtons[ i ] );
         dayButtons[i].addActionListener(this);
         dayButtons[i].setBackground(Color.LIGHT_GRAY);
         } 
    }
    if(DayOfWeek == 2 && ch ==1)
    {
        for ( int i = 0; i < 1; i++ )
         { dayButtons[ i ] = new JButton( "" ); 
         P3.add( dayButtons[ i ] );
         dayButtons[i].addActionListener(this);
         dayButtons[i].setBackground(Color.LIGHT_GRAY);
         } 
        for ( int i = 1; i < 32; i++ )
         { dayButtons[ i ] = new JButton(  i +"" ); 
         P3.add( dayButtons[ i ] );
         dayButtons[i].addActionListener(this);
         dayButtons[i].setBackground(c2);
         } 
        for ( int i = 32; i < 49; i++ )
         { dayButtons[ i ] = new JButton( "" ); 
         P3.add( dayButtons[ i ] );
         dayButtons[i].addActionListener(this);
         dayButtons[i].setBackground(Color.LIGHT_GRAY);
         } 
    }
    if(DayOfWeek == 3 && ch ==1)
    {
        for ( int i = 0; i < 2; i++ )
         { dayButtons[ i ] = new JButton( "" ); 
         P3.add( dayButtons[ i ] );
         dayButtons[i].addActionListener(this);
         dayButtons[i].setBackground(Color.LIGHT_GRAY);
         } 
        for ( int i =2; i < 33; i++ )
         { dayButtons[ i ] = new JButton(  i-1 +"" ); 
         P3.add( dayButtons[ i ] );
         dayButtons[i].addActionListener(this);
         dayButtons[i].setBackground(c2);
         } 
        for ( int i = 33; i < 49; i++ )
         { dayButtons[ i ] = new JButton( "" ); 
         P3.add( dayButtons[ i ] );
         dayButtons[i].addActionListener(this);
         dayButtons[i].setBackground(Color.LIGHT_GRAY);
         } 
    }
    if(DayOfWeek == 4 && ch ==1)
    {
        for ( int i = 0; i < 3; i++ )
         { dayButtons[ i ] = new JButton( "" ); 
         P3.add( dayButtons[ i ] );
         dayButtons[i].addActionListener(this);
         dayButtons[i].setBackground(Color.LIGHT_GRAY);
         } 
        for ( int i =3; i < 34; i++ )
         { dayButtons[ i ] = new JButton(  i-2 +"" ); 
         P3.add( dayButtons[ i ] );
         dayButtons[i].addActionListener(this);
         dayButtons[i].setBackground(c2);
         } 
        for ( int i = 34; i < 49; i++ )
         { dayButtons[ i ] = new JButton( "" ); 
         P3.add( dayButtons[ i ] );
         dayButtons[i].addActionListener(this);
         dayButtons[i].setBackground(Color.LIGHT_GRAY);
         } 
    }
    if(DayOfWeek == 5 && ch ==1)
    {
        for ( int i = 0; i < 4; i++ )
         { dayButtons[ i ] = new JButton( "" ); 
         P3.add( dayButtons[ i ] );
         dayButtons[i].addActionListener(this);
         dayButtons[i].setBackground(Color.LIGHT_GRAY);
         } 
        for ( int i =4; i < 35; i++ )
         { dayButtons[ i ] = new JButton(  i-3 +"" ); 
         P3.add( dayButtons[ i ] );
         dayButtons[i].addActionListener(this);
         dayButtons[i].setBackground(c2);
         } 
        for ( int i = 35; i < 49; i++ )
         { dayButtons[ i ] = new JButton( "" ); 
         P3.add( dayButtons[ i ] );
         dayButtons[i].addActionListener(this);
         dayButtons[i].setBackground(Color.LIGHT_GRAY);
         } 
    }
    if(DayOfWeek == 6 && ch ==1)
    {
        for ( int i = 0; i < 5; i++ )
         { dayButtons[ i ] = new JButton( "" ); 
         P3.add( dayButtons[ i ] );
         dayButtons[i].addActionListener(this);
         dayButtons[i].setBackground(Color.LIGHT_GRAY);
         } 
        for ( int i =5; i < 36; i++ )
         { dayButtons[ i ] = new JButton(  i-4 +"" ); 
         P3.add( dayButtons[ i ] );
         dayButtons[i].addActionListener(this);
         dayButtons[i].setBackground(c2);
         } 
        for ( int i = 36; i < 49; i++ )
         { dayButtons[ i ] = new JButton( "" ); 
         P3.add( dayButtons[ i ] );
         dayButtons[i].addActionListener(this);
         dayButtons[i].setBackground(Color.LIGHT_GRAY);
         } 
    }
    if(DayOfWeek == 7 && ch ==1)
    {
        for ( int i = 0; i < 6; i++ )
         { dayButtons[ i ] = new JButton( "" ); 
         P3.add( dayButtons[ i ] );
         dayButtons[i].addActionListener(this);
         dayButtons[i].setBackground(Color.LIGHT_GRAY);
         } 
        for ( int i =6; i < 37; i++ )
         { dayButtons[ i ] = new JButton(  i-5 +"" ); 
         P3.add( dayButtons[ i ] );
         dayButtons[i].addActionListener(this);
         dayButtons[i].setBackground(c2);
         } 
        for ( int i = 37; i < 49; i++ )
         { dayButtons[ i ] = new JButton( "" ); 
         P3.add( dayButtons[ i ] );
         dayButtons[i].addActionListener(this);
         dayButtons[i].setBackground(Color.LIGHT_GRAY);
         } 
    }
    if(DayOfWeek == 1 && ch ==2)
    {
        for ( int i = 0; i < 30; i++ )
         { dayButtons[ i ] = new JButton( i+1+"" ); 
         P3.add( dayButtons[ i ] );
         dayButtons[i].addActionListener(this);
         dayButtons[i].setBackground(c2);
         } 
        for ( int i = 30; i < 49; i++ )
         { dayButtons[ i ] = new JButton( "" ); 
         P3.add( dayButtons[ i ] );
         dayButtons[i].addActionListener(this);
         dayButtons[i].setBackground(Color.LIGHT_GRAY);
         } 

    }
    if(DayOfWeek == 2 && ch ==2)
    {
        for ( int i = 0; i < 1; i++ )
         { dayButtons[ i ] = new JButton( "" ); 
         P3.add( dayButtons[ i ] );
         dayButtons[i].addActionListener(this);
         dayButtons[i].setBackground(Color.LIGHT_GRAY);
         } 
        for ( int i =1; i < 31; i++ )
         { dayButtons[ i ] = new JButton(  i +"" ); 
         P3.add( dayButtons[ i ] );
         dayButtons[i].addActionListener(this);
         dayButtons[i].setBackground(c2);
         } 
        for ( int i = 31; i < 49; i++ )
         { dayButtons[ i ] = new JButton( "" ); 
         P3.add( dayButtons[ i ] );
         dayButtons[i].addActionListener(this);
         dayButtons[i].setBackground(Color.LIGHT_GRAY);
         } 
    }
    if(DayOfWeek == 3 && ch ==2)
    {
        for ( int i = 0; i < 2; i++ )
         { dayButtons[ i ] = new JButton( "" ); 
         P3.add( dayButtons[ i ] );
         dayButtons[i].addActionListener(this);
         dayButtons[i].setBackground(Color.LIGHT_GRAY);
         } 
        for ( int i =2; i < 32; i++ )
         { dayButtons[ i ] = new JButton(  i-1 +"" ); 
         P3.add( dayButtons[ i ] );
         dayButtons[i].addActionListener(this);
         dayButtons[i].setBackground(c2);
         } 
        for ( int i = 32; i < 49; i++ )
         { dayButtons[ i ] = new JButton( "" ); 
         P3.add( dayButtons[ i ] );
         dayButtons[i].addActionListener(this);
         dayButtons[i].setBackground(Color.LIGHT_GRAY);
         } 
    }
    if(DayOfWeek == 4 && ch ==2)
    {
        for ( int i = 0; i < 3; i++ )
         { dayButtons[ i ] = new JButton( "" ); 
         P3.add( dayButtons[ i ] );
         dayButtons[i].addActionListener(this);
         dayButtons[i].setBackground(Color.LIGHT_GRAY);
         } 
        for ( int i =3; i < 33; i++ )
         { dayButtons[ i ] = new JButton(  i-2 +"" ); 
         P3.add( dayButtons[ i ] );
         dayButtons[i].addActionListener(this);
         dayButtons[i].setBackground(c2);
         } 
        for ( int i = 33; i < 49; i++ )
         { dayButtons[ i ] = new JButton( "" ); 
         P3.add( dayButtons[ i ] );
         dayButtons[i].addActionListener(this);
         dayButtons[i].setBackground(Color.LIGHT_GRAY);
         } 
    }
    if(DayOfWeek == 5 && ch ==2)
    {
        for ( int i = 0; i < 4; i++ )
         { dayButtons[ i ] = new JButton( "" ); 
         P3.add( dayButtons[ i ] );
         dayButtons[i].addActionListener(this);
         dayButtons[i].setBackground(Color.LIGHT_GRAY);
         } 
        for ( int i =4; i < 35; i++ )
         { dayButtons[ i ] = new JButton(  i-3 +"" ); 
         P3.add( dayButtons[ i ] );
         dayButtons[i].addActionListener(this);
         dayButtons[i].setBackground(c2);
         } 
        for ( int i = 35; i < 49; i++ )
         { dayButtons[ i ] = new JButton( "" ); 
         P3.add( dayButtons[ i ] );
         dayButtons[i].addActionListener(this);
         dayButtons[i].setBackground(Color.LIGHT_GRAY);
         } 
    }
    if(DayOfWeek == 6 && ch ==2)
    {
        for ( int i = 0; i < 5; i++ )
         { dayButtons[ i ] = new JButton( "" ); 
         P3.add( dayButtons[ i ] );
         dayButtons[i].addActionListener(this);
         dayButtons[i].setBackground(Color.LIGHT_GRAY);
         } 
        for ( int i =5; i < 36; i++ )
         { dayButtons[ i ] = new JButton(  i-4 +"" ); 
         P3.add( dayButtons[ i ] );
         dayButtons[i].addActionListener(this);
         dayButtons[i].setBackground(c2);
         } 
        for ( int i = 36; i < 49; i++ )
         { dayButtons[ i ] = new JButton( "" ); 
         P3.add( dayButtons[ i ] );
         dayButtons[i].addActionListener(this);
         dayButtons[i].setBackground(Color.LIGHT_GRAY);
         } 
    }
    if(DayOfWeek == 7 && ch ==2)
    {
        for ( int i = 0; i < 6; i++ )
         { dayButtons[ i ] = new JButton( "" ); 
         P3.add( dayButtons[ i ] );
         dayButtons[i].addActionListener(this);
         dayButtons[i].setBackground(Color.LIGHT_GRAY);
         } 
        for ( int i =6; i < 37; i++ )
         { dayButtons[ i ] = new JButton(  i-5 +"" ); 
         P3.add( dayButtons[ i ] );
         dayButtons[i].addActionListener(this);
         dayButtons[i].setBackground(c2);
         } 
        for ( int i = 37; i < 49; i++ )
         { dayButtons[ i ] = new JButton( "" ); 
         P3.add( dayButtons[ i ] );
         dayButtons[i].addActionListener(this);
         dayButtons[i].setBackground(Color.LIGHT_GRAY);
         } 
    }
    for( int i = DayOfWeek-1; i<49 ; i++)
    {
        if( i- DayOfWeek+2 == GC.get(GC.DATE))
        {
            dayButtons[i].setBackground(c);
        }
    }


}


public void actionPerformed(ActionEvent arg0) {


    if(arg0.getSource()== Previous)
    {   clear();


        if(month !=0)
        {
            month --;

            if( month ==0 || month ==2 || month == 4 || month ==6 || month==7 || month ==9 || month ==11)
            {
                ch=1;
            }
            else
            {
                ch=2;
            }

        }
        else
        {
            year--;
            month=11;
            ch=1;
        }
        CurrDate.setText ("                   "+ months[month]+"        "+year+"               ");
        GregorianCalendar cal = new GregorianCalendar(year, month, 1);
        int d=cal.get(cal.DAY_OF_WEEK);
        DayOfWeek=d;
        DrawCalendar(d,year,month);

        P4.add(Time);
        P1.setBackground(c);
        P2.setBackground(c);
        P4.setBackground(c);
    }
    if(arg0.getSource()== Next)
    {
        clear();

        if(month !=11)
        {
            month ++;
            if( month ==0 || month ==2 || month == 4 || month ==6 || month==7 || month ==9 || month ==11)
            {
                ch=1;
            }
            else
            {
                ch=2;
            }
        }
        else
        {
            year++;
            month=0;
            ch=1;

        }
        CurrDate.setText ("                   "+ months[month]+"        "+year+"               ");
        GregorianCalendar cal = new GregorianCalendar(year, month, 1);
        int d=cal.get(cal.DAY_OF_WEEK);
        DayOfWeek=d;
        DrawCalendar(d,year,month);
        P4.add(Time);
        P1.setBackground(c);
        P2.setBackground(c);
        P4.setBackground(c);

    }   
    for( int i=DayOfWeek-1; i<30+DayOfWeek; i++)
    {
        if(arg0.getSource()==dayButtons[i])
        {
            S1 = JOptionPane.showInputDialog(this,"Insert your Note");

        }
    }


}

private void clear() {
    for(int i =0; i<6;i++)
    {
        for(int j=0;j<7;j++)
        {
            P3.removeAll();
        }
    }

}

public static void main(String [] args){
    Calendar C = new Calendar();
    C.setSize(400,315);

    C.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    C.setVisible(true);
    C.setResizable(false);
    }


}

大家好,,, :)

这个日历的问题是每个月的天数!我写的代码不能正常工作!我不知道问题出在哪里如果任何人都可以帮助,,thnx反正!

在此处输入图像描述

4

2 回答 2

2

天数始终为 31 的原因是因为单击按钮时您没有重新计算“ch”。

您无法弄清楚这一点的原因是因为您的实现使用了大约 5-10 倍于实际需要的代码,并且因为它是一团糟。还因为您可能没有使用调试器来调试它。

使用来自 Checkstyle、FindBugs、PMD 等的默认规则来告诉你一些代码有问题的地方。

于 2012-05-07T18:34:28.490 回答
1

如果您参数化重复的代码调用,您可以大大减少代码:

private void tripleDraw (int n1, int n2, int d) 
{
    for (int i = 0; i < n1; i++)
    { 
        dayButtons [i] = new JButton (""); 
        P3.add (dayButtons [i]);
        dayButtons [i].setBackground (Color.LIGHT_GRAY);
    } 
    for (int i = n1; i < n2; i++)
    {
        dayButtons [i] = new JButton (i+d + ""); 
        P3.add (dayButtons [i]);
        dayButtons [i].setBackground (c2);
    } 
    for (int i = n2; i < 49; i++)
    { 
        dayButtons [i] = new JButton (""); 
        P3.add (dayButtons [i]);
        dayButtons [i].setBackground (Color.LIGHT_GRAY);
    } 
}

private void DrawCalendar (int DayOfWeek, int year, int month) 
{
    P3.setLayout (new GridLayout (7, 7, 3, 3));
    dayButtons = new JButton [49];

    if (DayOfWeek == 1 && ch == 1)  tripleDraw (0, 31, 1);
    if (DayOfWeek == 2 && ch == 1)  tripleDraw (1, 32, 0);
    if (DayOfWeek == 3 && ch == 1)  tripleDraw (2, 33, -1);
    if (DayOfWeek == 4 && ch == 1)  tripleDraw (3, 34, -2);
    if (DayOfWeek == 5 && ch == 1)  tripleDraw (4, 35, -3);
    if (DayOfWeek == 6 && ch == 1)  tripleDraw (5, 36, -4);
    if (DayOfWeek == 7 && ch == 1)  tripleDraw (6, 37, -5);  

    if (DayOfWeek == 1 && ch == 2)  tripleDraw (0, 30, 1);
    if (DayOfWeek == 2 && ch == 2)  tripleDraw (1, 31, 0);
    if (DayOfWeek == 3 && ch == 2)  tripleDraw (2, 32, -1);
    if (DayOfWeek == 4 && ch == 2)  tripleDraw (3, 33, -2);
    if (DayOfWeek == 5 && ch == 2)  tripleDraw (4, 35, -3);
    if (DayOfWeek == 6 && ch == 2)  tripleDraw (5, 36, -4);
    if (DayOfWeek == 7 && ch == 2)  tripleDraw (6, 37, -5);  

然后您在第二个块 (ch==2) 中看到,从 33 到 35 的跳跃 - 这是故意的吗?

下一步是将第一个块替换为:

 if (ch == 1)  tripleDraw (DayOfWeek - 1, DayOfWeek + 31, 2-DayOfWeek);

等等。

于 2012-05-07T19:03:07.720 回答