实验五Java事件处理Word文档格式.docx
《实验五Java事件处理Word文档格式.docx》由会员分享,可在线阅读,更多相关《实验五Java事件处理Word文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
//斜体按钮
JButtoncolorBtn;
//颜色按钮
String[]fontNames;
//字体名称
String[]fontSizes;
//字体大小
JLabellabel;
//输入提示标签
JTextFieldinputText;
//文字输入框
JTextAreatxtArea;
//文字显示区
JPanelnorthPanel;
//字体设置
JPanelcenterPanel;
//显示效果区
JPanelsouthPanel;
//样式设置
Fontfont;
intboldStyle,italicStyle;
intfontSizeStyle;
StringfontNameStyle;
ColorcolorStyle=Color.black;
//设置字体的默认颜色为黑色
String[]style={"
默认显示效果"
"
Windows显示效果"
Unix显示效果"
};
publicArtFont(){
super("
字体设置"
);
//设置默认字体
boldStyle=0;
italicStyle=0;
fontSizeStyle=10;
fontNameStyle="
宋体"
;
font=newFont(fontNameStyle,boldStyle+italicStyle,fontSizeStyle);
northPanel=getNorthPanel();
centerPanel=getCenterPanel();
southPanel=getSouthPanel();
//设置容器
Containercontainer=getContentPane();
container.setLayout(newBorderLayout());
add(northPanel,BorderLayout.NORTH);
//将northPanel添加到窗体的北部
add(centerPanel,BorderLayout.CENTER);
//将centerPanel添加到窗体的中部
add(southPanel,BorderLayout.SOUTH);
//将southPanel添加到窗体的南部
setSize(500,300);
setLocationRelativeTo(null);
//将窗体位于屏幕的中央
setVisible(true);
}
privateJPanelgetNorthPanel(){
JPanelpanel=newJPanel();
label=newJLabel("
输入"
inputText=newJTextField(10);
boldBx=newJCheckBox("
粗体"
italicBx=newJCheckBox("
斜体"
colorBtn=newJButton("
颜色"
inputText.addActionListener(newActionListener(){
@Override
publicvoidactionPerformed(ActionEvente){
//文本输入
txtArea.setText(inputText.getText());
}
});
boldBx.addItemListener(newItemListener(){
publicvoiditemStateChanged(ItemEvente){
//加粗
if(e.getStateChange()==ItemEvent.SELECTED)
boldStyle=1;
else
boldStyle=0;
font=newFont(fontNameStyle,boldStyle+italicStyle,fontSizeStyle);
txtArea.setFont(font);
italicBx.addItemListener(newItemListener(){
//斜体
italicStyle=1;
italicStyle=0;
colorBtn.addActionListener(newActionListener(){
//改变颜色
colorStyle=JColorChooser.showDialog(null,"
请选择一种颜色"
colorStyle);
colorBtn.setForeground(colorStyle);
txtArea.setForeground(colorStyle);
font=newFont(fontNameStyle,boldStyle+italicStyle,fontSizeStyle);
panel.add(label);
panel.add(inputText);
panel.add(boldBx);
panel.add(italicBx);
panel.add(colorBtn);
returnpanel;
}
privateJPanelgetCenterPanel(){
panel.setLayout(newBorderLayout());
txtArea=newJTextArea();
panel.add(newJScrollPane(txtArea),BorderLayout.CENTER);
privateJPanelgetSouthPanel(){
//获得系统默认字体
GraphicsEnvironmentge=GraphicsEnvironment.getLocalGraphicsEnvironment();
fontNames=ge.getAvailableFontFamilyNames();
fontType=newJComboBox(fontNames);
//设置字体大小
fontSizes=newString[63];
for(inti=0;
i<
fontSizes.length;
i++){
fontSizes[i]=Integer.toString(i+10);
}
fontSize=newJComboBox(fontSizes);
windowStyle=newJComboBox(style);
fontType.addItemListener(newItemListener(){
//字体的类型
fontNameStyle=(String)e.getItem();
fontSize.addItemListener(newItemListener(){
//字体的大小
Strings=(String)e.getItem();
fontSizeStyle=Integer.parseInt(s);
windowStyle.addItemListener(newItemListener(){
//改变窗口
StringclassName="
"
if(s.equals("
))
className="
com.sun.java.swing.plaf.windows.WindowsLookAndFeel"
elseif(s.equals("
com.sun.java.swing.plaf.motif.MotifLookAndFeel"
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);
}
publicstaticvoidmain(Stringargs[]){
artFont=newArtFont();
artFont.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
2.日历应用程序设计
在实验三第2题的基础上,添加事件处理机制,并逐步完善程序功能。
分别用CalendarFrame类的对象做监视器和匿名内部类的对象做监视器实现。
在文本框inputYear中输入年份,验证年份的有效性;
按回车键后,显示输入年份的正确日历
单击previousMonth按钮可以显示当前月的上一月的日历;
如果月份小于1,则显示上一年的12月
单击nextMonth按钮,可以显示当前月的下一月的日历;
如果月份大于1,则显示下一年的1月
CalendarBean.java
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_WEEK)-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;
星期几+day;
a[i]=String.valueOf(n);
n++;
returna;
CalendarFrame.java
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(){
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;
42;
labelDay[i].setText(days[i]);
showMessage.setText("
日历:
+calendar.getYear()+"
年"
+calendar.getMonth()+"
月"
previousMonth.addActionListener(newActionListener(){
//上月按钮
month--;
if(month<
1){
year--;
month=1;
nextMonth.addActionListener(newActionListener(){
//下月按钮
month++;
if(month>
12){
year++;
panel.add(labelYear);
panel.add(inputYear);
panel.add(previousMonth);
panel.add(nextMonth);
privatePanelgetCenterPanel(){
panel.setLayout(newGridLayout(7,7));
//将panel的布局设置为7行7列的GridLayout布局
for