问题描述:
编写一个程序,有一个窗口,该窗口为BorderLayout布局。窗口的中心添加一个Panel容器:pCenter,pCenter的布局是7行7列的GridLayout布局,pCenter的中放置49个标签,用来显示日历。窗口北面添加一个Panel容器pNorth,其布局是FlowLayout布局,pNorth放置两个按钮:nextMonth和previousMonth按钮,单击nextMonth,可以显示当前月的下一个月的日历;单击previousMonth按钮,可以显示当前月的上一个月的日历。窗口的南面添加一个Panel容器pSouth,其布局是FlowLayout布局,pSouth中放置一个标签用来显示一些信息。请完成界面设计和相关功能。运行结果如下图所示。
问题解决:
新建Java项目,在项目下新建package,命名为Calendar。
CalendarBean.java
package Calendar;import java.util.Calendar;
public class CalendarBean
{ String day[];int year=2018,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;}
}
CalendarFrame.java
package Calendar;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class CalendarFrame extends Frame implements ActionListener
{ Label labelDay[]=new Label[42];Button titleName[]=new Button[7];String name[]={"日","一","二","三", "四","五","六"};Button nextMonth,previousMonth;int year=2020,month=5;CalendarBean calendar;Label showMessage=new Label("",Label.CENTER);public CalendarFrame(){ Panel pCenter=new Panel();pCenter.setLayout(new GridLayout(7,7)); //将pCenter的布局设置为7行7列的GridLayout 布局。for(int i=0;i<7;i++){ titleName[i]=new Button(name[i]);pCenter.add(titleName[i]);//pCenter添加组件titleName[i]。}for(int i=0;i<42;i++){labelDay[i]=new Label("",Label.CENTER);pCenter.add(labelDay[i]);//pCenter添加组件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]);}nextMonth=new Button("下月");previousMonth=new Button("上月");nextMonth.addActionListener(this);previousMonth.addActionListener(this);Panel pNorth=new Panel(),pSouth=new Panel();pNorth.add(previousMonth);pNorth.add(nextMonth);pSouth.add(showMessage);showMessage.setText("日历:"+calendar.getYear()+"年"+ calendar.getMonth()+"月" );ScrollPane scrollPane=new ScrollPane();scrollPane.add(pCenter);add(scrollPane,BorderLayout.CENTER);// 窗口添加scrollPane在中心区域add(pNorth,BorderLayout.NORTH);// 窗口添加pNorth 在北面区域add(pSouth,BorderLayout.SOUTH);// 窗口添加pSouth 在南区域。}public void actionPerformed(ActionEvent e){ if(e.getSource()==nextMonth){ month=month+1;if(month>12) {month=1;year++;}calendar.setYear(year);calendar.setMonth(month);String day[]=calendar.getCalendar();for(int i=0;i<42;i++){ labelDay[i].setText(day[i]);}}else if(e.getSource()==previousMonth){ month=month-1;if(month<1) {month=12;year--;}calendar.setYear(year);calendar.setMonth(month);String day[]=calendar.getCalendar();for(int i=0;i<42;i++){ labelDay[i].setText(day[i]);}}showMessage.setText("日历:"+calendar.getYear()+"年"+calendar.getMonth()+"月" );}
}
CalendarMainClass.java
package Calendar;
public class CalendarMainClass
{ public static void main(String args[]){ CalendarFrame frame=new CalendarFrame();frame.setBounds(100,100,360,300);frame.setVisible(true);frame.validate();frame.addWindowListener(new java.awt.event.WindowAdapter(){ public void windowClosing(java.awt.event.WindowEvent e){ System.exit(0);}});}
}