public class CalendarFrame extends JFrame implements ActionListener{ /** * */
private static final long serialVersionUID = -4568452730166791416L;
JLabel labelDay[]=new JLabel[42]; JButton titleName[]=new JButton[7];
String name[]={\日\,\一\,\二\,\三\,\四\,\五\,\六\}; JButton nextMonth,previousMonth; CalendarBean calendar;
JLabel showMessage=new JLabel(\,JLabel.CENTER); int year=2011,month=2; public CalendarFrame() {
// TODO 自动生成的构造函数存根 JPanel pCenter=new JPanel();
pCenter.setLayout(new GridLayout(7,7)); for(int i=0;i<7;i++){
titleName[i]=new JButton(name[i]); titleName[i].setBorder(new SoftBevelBorder(BevelBorder.RAISED)); pCenter.add(titleName[i]); }
for(int i=0;i<42;i++){
labelDay[i]=new JLabel(\,JLabel.CENTER); labelDay[i].setBorder(new SoftBevelBorder(BevelBorder.LOWERED)); pCenter.add(labelDay[i]); }
calendar=new CalendarBean(); nextMonth=new JButton(\下月\);
previousMonth=new JButton(\上月\); nextMonth.addActionListener(this);
previousMonth.addActionListener(this); JPanel pNorth=new JPanel(), pSouth=new JPanel(); pNorth.add(previousMonth); pNorth.add(nextMonth); pSouth.add(showMessage);
add(pCenter, BorderLayout.CENTER); add(pNorth,BorderLayout.NORTH); add(pSouth,BorderLayout.SOUTH); setYearAndMonth(year,month);
6
setDefaultCloseOperation(DISPOSE_ON_CLOSE); }
public void setYearAndMonth(int year2, int month2) { // TODO 自动生成的方法存根 calendar.setyear(year2); calendar.setMonth(month2);
String day[]=calendar.getCalender(); for(int i=0;i<42;i++){
labelDay[i].setText(day[i]); }
showMessage.setText(\日历\+calendar.getYear()+\年\+calendar.getMonth()+\月\); }
@Override
public void actionPerformed(ActionEvent e) { // TODO 自动生成的方法存根 if(e.getSource()==nextMonth){ month=month+1; if(month>12) month=1;
calendar.setMonth(month);
String day[]=calendar.getCalender(); 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;
calendar.setMonth(month);
String day[]=calendar.getCalender(); for(int i=0;i<42;i++)
labelDay[i].setText(day[i]); }
showMessage.setText(\日历\+calendar.getYear()+\年\+calendar.getMonth()+\月\); } }
package 布局与日历;
import java.util.Calendar;
public class CalendarBean {
7
String day[];
int year=2005,month=0;
public void setyear(int year) { // TODO 自动生成的方法存根 this.year=year; }
public int getYear() {
// TODO 自动生成的方法存根 return year; }
public void setMonth(int month) { // TODO 自动生成的方法存根 this.month=month; }
public int getMonth() {
// TODO 自动生成的方法存根 return month; }
public String[] getCalender() { // TODO 自动生成的方法存根 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||month==10) day=30;
if(month==2){
if((year%4==0)&&(year0!=0)||year@0==0) day=29; else
day=28; }
for(int i=星期几,n=1;i<星期几+day;i++){ a[i]=String.valueOf(n); n++; }
return a; }
8
}
3.实验结果
4.课后练习:
在CalenderFrame类中增加一个JTextField文本框,用户可以通过在文本框中输入年份来修改calender对象的int成员。 (三)实验题目三: 华容道
1.要点分析:编写GUI程序,用户通过键盘和鼠标时间来实现曹操、关羽等人物的移动。 2.程序源代码:
package 华容道;
public class MainClass {
public static void main(String args[]){ new Hua_Rong_Dao(); } }
package 华容道;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Person extends JButton implements FocusListener{ int number;
9
Color c=new Color(255,245,170);
Font font=new Font(\宋体\,Font.BOLD,12); Person(int number,String s){ super(s);
setBackground(c); setFont(font);
this.number=number; c=getBackground();
addFocusListener(this); }
public void focusGained(FocusEvent e) { // TODO Auto-generated method stub setBackground(Color.red); }
public void focusLost(FocusEvent e) { // TODO Auto-generated method stub setBackground(c); } }
package 华容道;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Hua_Rong_Dao extends JFrame implements MouseListener,KeyListener,ActionListener {
Person person[]=new Person[10]; JButton left,rigth,above,below;
JButton restart=new JButton(\重新开始\); public Hua_Rong_Dao(){ init();
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); setBounds(100,100,320,500); setVisible(true); validate(); }
public void init(){ setLayout(null); add(restart);
restart.setBounds(100,320,120,35);
10