}
className =
\;
else if (s.equals(\显示效果\)) className = else if (s.equals(\默认显示效果\)) className = try { }
UIManager.setLookAndFeel(className);
SwingUtilities.updateComponentTreeUI(this); System.out.println(\);
\;
UIManager.getCrossPlatformLookAndFeelClassName();
} catch (Exception de) {
public static void main(String args[]){
代码4 ;
artFont.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }
思考:
(1)如果将颜色按钮colorBtn的事件监听者改为一个为ActionListener匿名对象,即将程序中的语句colorBtn.addActionListener(this)改成如下形式:
colorBtn.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ if(e.getSource()==colorBtn){//改变颜色
colorStyle=JColorChooser.showDialog(this, \选择字体颜色\,colorStyle); //this 换成colorBtn
colorBtn.setForeground(colorStyle); txtArea.setForeground(colorStyle); } } });
程序可否编译正常?运行正常吗?如果不能,是什么原因?
(2)如果将程序ArtFont.java中所有的匿名监听者改为this,那么程序主要会做什么变动?
(3)程序运行结果是java的默认显示效果,如果希望用户能控制界面的显示效果,呈现出具有UNIX操作系统的显示外观和Window操作系统的默认显示效果,该如何修改程序?
(二) 布局与日历
【实验目的】
学习使用布局类。
【实验任务】
编写一个应用程序,有一个窗口,该窗口为BorderLayout布局。窗口的中心添加一个Panel容器:pCenter,pCenterd的布局是7行7列的GridLayout布局,pCenter中放置49个标签,用来显示日历。窗口的北面添加一个Panel容器pNorth,其布局是FlowLayout布局,pNorth放置两个按钮:nextMonth和previousMonth,单击nextMonth按钮,可以显示当前月的下一月的日历;单击previousMonth按钮可以显示当前月的上一月的日历。窗口的南面添加一个Panel容器pSouth,其布局是FlowLayout,pSouth中放置一个标签用来显示一些信息。
【实验内容】
阅读并分析以下程序,将程序中的代码补充完整,编译并运行程序,查看结果。 //CalendarBean.java
import java.util.Calendar; public 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)&&(year0!=0))||(year@0==0)) { day=29; } else
{ day=28; } }
for(int i=星期几,n=1;i
a[i]=String.valueOf(n) ; n++; } return a; } }
//CalendarFrame.java
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=2006,month=10; CalendarBean calendar;
Label showMessage=new Label(\ public CalendarFrame()
{ Panel pCenter=new Panel();
【代码1】 //将pCenter的布局设置为7行7列的GridLayout 布局。 for(int i=0;i<7;i++)
{ titleName[i]=new Button(name[i]);
【代码2】//pCenter添加组件titleName[i]。 }
for(int i=0;i<42;i++) {
labelDay[i]=new Label(\ 【代码3】//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.getMonth()+\月\
ScrollPane scrollPane=new ScrollPane(); scrollPane.add(pCenter);
【代码4】// 窗口添加scrollPane在中心区域 【代码5】// 窗口添加pNorth 在北面区域 【代码6】// 窗口添加pSouth 在南区域。 }
public void actionPerformed(ActionEvent e) { if(e.getSource()==nextMonth) { month=month+1; if(month>12) month=1;
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;
calendar.setMonth(month);
String day[]=calendar.getCalendar(); for(int i=0;i<42;i++)
{ labelDay[i].setText(day[i]); } }
showMessage.setText(\日历:\年\月\ }