import java.util.*;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import javax.swing.*;
import javax.swing.JOptionPane;class calendarbean
{
String day[];
int year=2005,month=0;
public void setyear(int year)
{
this.year=year;
}
public int getyear()
{
return year;
}
public void setmonth(int month)
{
this.month=month;
}
public int getmonth()
{
return month;
}
public String[] getcalendar()
{
String a[]=new String[42];
Calendar 日历=Calendar.getInstance();
日历.set(year,month-1,1 );
int 星期几=日历.get(Calendar.DAY_OF_WEEK)-1;
int day=0;
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
{
day=31;
}
if(month==4||month==6||month==9||month==11)
{
day=30;
}
if(month==2)
{
if((year%4==0)&&(year%100!=0)||(year%400==0))
{
day=29;
}
else
{
day=28;
}
}
for(int i=星期几,n=1;i<星期几+day;i++)
{
a[i]=String.valueOf(n);
n++;
}
return a;

}
}
//  画整个日历的框架的类
class calendarframe extends Frame implements ActionListener
{
Label labelDay[]=new Label [42];
Button titleName[]=new Button[7];
String name[]={"日","一","二","三","四","五","六"};
    TextField yearin;
TextField monthin;
Button get;
int year=2006,month=10;
calendarbean calendar;
Label showMessage=new Label("",Label.CENTER);
public calendarframe ()
{
Panel pcenter=new Panel();
pcenter.setLayout(new GridLayout(7,7));
    for(int i=0;i<7;i++){
titleName[i]=new Button(name[i]);
pcenter.add(titleName[i]);
    }
    for(int i=0;i<42;i++)
{
labelDay[i]=new Label("",Label.CENTER);
pcenter.add(labelDay[i]);
}
calendar=new calendarbean();
calendar.setyear(year);
calendar.setmonth(month);
String day[]=calendar.getcalendar();
for(int i=0;i<42;i++)
{
labelDay[i].setText(day[i]);
}
    TextField yearin=new TextField(10);
TextField monthin=new TextField(10);
Button get=new Button ("点击");
get.addActionListener(this);
Panel pnorth=new Panel(),psouth=new Panel();
pnorth.add(yearin);
pnorth.add(monthin);
pnorth.add(get);
psouth.add(showMessage);
showMessage.setText("日历: "+calendar.getyear()+"年"+calendar.getmonth()+"月");
ScrollPane scrollPane=new ScrollPane();
scrollPane.add(pcenter);
//Container container=getContentPane();
add(scrollPane,BorderLayout.CENTER);
add(pnorth,BorderLayout.NORTH);
add(psouth,BorderLayout.SOUTH);
}
public void actionPerformed(ActionEvent e)
{ try{year=Integer.parseInt(yearin.getText());
month=Integer.parseInt(monthin.getText());
calendar.setyear(year);
calendar.setmonth(month);
String day[]=calendar.getcalendar();
for (int i=0;i<42 ;i++ )
{
labelDay[i].setText(day[i]);
}
}
catch(NumberFormatException ex)
{
}
showMessage.setText("日历:"+calendar.getyear()+"年"+calendar.getmonth()+"月");
validate();
}
}
//主类 但不知道如何编写关闭窗口的函数
public class calendarmainclass2
{
public static void main(String args[])
{
calendarframe frame=new calendarframe();
frame.setBounds(100,100,360,300);
frame.setVisible(true);
}
}
   没有语法错误  但是不能运行  好像说什么异常  请求哪位达人帮忙修改一下 万分感谢  ~~~!

解决方案 »

  1.   

    TextField yearin=new TextField(10); 
    TextField monthin=new TextField(10); 
    改为
    yearin = new TextField(10);
    monthin = new TextField(10);你重新定义了两个local variable, member variable没有实例化
      

  2.   

    if(month==1 ¦ ¦month==3 ¦ ¦month==5 ¦ ¦month==7 ¦ ¦month==8 ¦ ¦month==10 ¦ ¦month==12) 

    day=31; 

    if(month==4 ¦ ¦month==6 ¦ ¦month==9 ¦ ¦month==11) 

    day=30; 

    if(month==2) 

    if((year%4==0)&&(year%100!=0) ¦ ¦(year%400==0)) 

    day=29; 
    } 我改成了:
    if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8
    || month == 10 || month == 12) {
    day = 31;
    }
    if (month == 4 || month == 6 || month == 9 || month == 11) {
    day = 30;
    }
    if (month == 2) {
    if ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0)) {
    day = 29;
    } else {
    day = 28;
    }
    }
    可以运行啊.
      

  3.   

    你的关闭窗口的代码:(在你的下面的类的构造器里面写啊!!!)class calendarframe extends Frame implements ActionListener
    {
        public calendarframe()
        {
            this.addWindowListener(new WindowAdapter()
    {
    public void windowClosing(WindowEvent e)
    {
    System.exit(0);
    }

    });
        }
    }
      

  4.   

    嗯,在这里发现改不改都是一样的.在ECLIPSE里不认识那个这里写的两竖,晕!还特意说出来,见笑了.还是继续晕...