fontSizes[i]=Integer.toString(i+10);
}
fontSize=newJComboBox(fontSizes);
windowStyle=newJComboBox(style);
fontType.addItemListener(newItemListener(){
@Override
publicvoiditemStateChanged(ItemEvente){
//字体的类型
fontNameStyle=(String)e.getItem();
font=newFont(fontNameStyle,boldStyle+italicStyle,fontSizeStyle);
txtArea.setFont(font);
}
});
fontSize.addItemListener(newItemListener(){
@Override
publicvoiditemStateChanged(ItemEvente){
//字体的大小
Strings=(String)e.getItem();
fontSizeStyle=Integer.parseInt(s);
font=newFont(fontNameStyle,boldStyle+italicStyle,fontSizeStyle);
txtArea.setFont(font);
}
});
windowStyle.addItemListener(newItemListener(){
@Override
publicvoiditemStateChanged(ItemEvente){
//改变窗口
Strings=(String)e.getItem();
StringclassName="";
if(s.equals("Windows显示效果"))
className="com.sun.java.swing.plaf.windows.WindowsLookAndFeel";
elseif(s.equals("Unix显示效果"))
className="com.sun.java.swing.plaf.motif.MotifLookAndFeel";
elseif(s.equals("默认显示效果"))
className=UIManager.getCrossPlatformLookAndFeelClassName();
try{
UIManager.setLookAndFeel(className);
SwingUtilities.updateComponentTreeUI(artFont);
}catch(Exceptionde){
System.out.println("Exceptionhappened!
");
}
}
});
panel.add(fontType);
panel.add(fontSize);
panel.add(windowStyle);
returnpanel;
}
publicstaticvoidmain(Stringargs[]){
artFont=newArtFont();
artFont.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
2.日历应用程序设计
在实验三第2题的基础上,添加事件处理机制,并逐步完善程序功能。
分别用
CalendarFrame类的对象做监视器和匿名内部类的对象做监视器实现。
要求实现如下功能:
在文本框inputYear中输入年份,验证年份的有效性;按回车键后,显示输入
年份的正确日历
单击previousMonth按钮可以显示当前月的上一月的日历;如果月份小于1,
则显示上一年的12月
单击nextMonth按钮,可以显示当前月的下一月的日历;如果月份大于1,则
显示下一年的1月
CalendarBean.java
packageSy;
importjava.util.Calendar;
publicclassCalendarBean{
Stringday[];
intyear=2013,month=0;
publicvoidsetYear(intyear){
this.year=year;
}
publicintgetYear(){
returnyear;
}
publicvoidsetMonth(intmonth){
this.month=month;
}
publicintgetMonth(){
returnmonth;
}
//返回某年某月1号开始的日期数组
publicString[]getCalendar(){
Stringa[]=newString[42];
Calendar日历=Calendar.getInstance();
//注意:
1月份是从0开始,所以要减1
日历.set(year,month-1,1);
int星期几=日历.get(Calendar.DAY_OF_WEE)K-1;
intday=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(inti=星期几,n=1;i<星期几+day;i++){
a[i]=String.valueOf(n);
n++;
}
returna;
}
}
CalendarFrame.java
packageSy;
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
publicclassCalendarFrameextendsFrame{
LabellabelDay[]=newLabel[42];
LabellabelYear;
ButtontitleName[]=newButton[7];
ButtonnextMonth,previousMonth;
LabelshowMessage;
TextFieldinputYear;
CalendarBeancalendar;
Stringname[]={"日","一","二","三","四","五","六"};
intyear=2013,month=1;
Stringdays[];
publicCalendarFrame(){
calendar=newCalendarBean();
calendar.setYear(year);
calendar.setMonth(month);
days=calendar.getCalendar();
ScrollPanescrollPane=newScrollPane();
scrollPane.add(getCenterPanel());
add(scrollPane,BorderLayout.CENTER);//窗口添加scrollPane在中心区域
add(getNorthPanel(),BorderLayout.NORTH);//窗口添加pNorth在北面区域
add(getSouthPanel(),BorderLayout.SOUTH);//窗口添加pSouth在南区域。
}
privatePanelgetNorthPanel(){
Panelpanel=newPanel();
labelYear=newLabel("请输入年份:
");
inputYear=newTextField(10);
previousMonth=newButton("上月");
nextMonth=newButton("下月");
inputYear.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
//文本输入
try{
year=Integer.parseInt(inputYear.getText());
}catch(NumberFormatExceptione1){
JOptionPane.showMessageDialog(null,"您输入的年份有误,
请重新输入!
");
inputYear.setFocusable(true);
}
calendar.setYear(year);
calendar.setMonth(month);
days=calendar.getCalendar();
for(inti=0;i<42;i++){
labelDay[i].setText(days[i]);
}
showMessage.setText("日历:
"+calendar.getYear()+"年"
+calendar.getMonth()+"月");
}
});
previousMonth.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
//上月按钮
month--;
if(month<1){
year--;
month=1;
}
calendar.setYear(year);
calendar.setMonth(month);
days=calendar.getCalendar();
for(inti=0;i<42;i++){
labelDay[i].setText(days[i]);
}
showMessage.setText("日历:
"+calendar.getYear()+"年"
+calendar.getMonth()+"月");
}
});
nextMonth.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
//下月按钮
month++;
if(month>12){
year++;
month=1;
}
calendar.setYear(year);
calendar.setMonth(month);
days=calendar.getCalendar();
for(inti=0;i<42;i++){
labelDay[i].setText(days[i]);
}
showMessage.setText("日历:
"+calendar.getYear()+"年"
+calendar.getMonth()+"月");
}
});
panel.add(labelYear);
panel.add(inputYear);
panel.add(previousMonth);
panel.add(nextMonth);
returnpanel;
}
privatePanelgetCenterPanel(){
Panelpanel=newPanel();
panel.setLayout(newGridLayout(7,7));
//将panel的布局设置为7行7列的GridLayout布局
for(inti=0;i<7;i++){
titleName[i]=newButton(name[i]);
panel.add(titleName[i]);
//panel添加组件titleName[i]。
}
for(inti=0;i<42;i++){
labelDay[i]=newLabel("",Label.CENTER);
panel.add(labelDay[i]);
//panel添加组件labelDay[i]。
}
for(inti=0;i<42;i++){
labelDay[i].setText(days[i]);
}
returnpanel;
}
privatePanelgetSouthPanel(){
Panelpanel=newPanel();
showMessage=newLabel();
showMessage.setText("日历:
"+calendar.getYear()+"年"
+calendar.getMonth()+"月");
panel.add(showMessage);
returnpanel;
}
}
CalendarMainClass.java
packageSy;
importjava.awt.event.*;
publicclassCalendarMainClass{
publicstaticvoi