实验五Java事件处理.docx
- 文档编号:6365799
- 上传时间:2023-01-05
- 格式:DOCX
- 页数:15
- 大小:24.66KB
实验五Java事件处理.docx
《实验五Java事件处理.docx》由会员分享,可在线阅读,更多相关《实验五Java事件处理.docx(15页珍藏版)》请在冰豆网上搜索。
实验五Java事件处理
实验五Java事件处理
实验目的
1.掌握Java语言中的事件处理方法
2.掌握Java语言中事件源、监视器和处理事件的接口的概念
实验内容
1.图形用户界面设计程序(ArtFont.java)
在实验三第1题的基础上,添加事件处理机制,并逐步完善程序功能。
分别用ArtFont
类的对象做监视器和匿名内部类的对象做监视器实现。
要求实现如下功能:
当在文本框中输入文字后回车,在文本域中显示输入的文字。
当分别选择粗体和斜体复选框时,文本域中的文字分别显示粗体和斜体样式。
当点击颜色按钮时,出现颜色选择对话框,选择需要的颜色,按确定按钮后,
按钮的前景色和文本域的前景色设置为选定的颜色。
当选择字体样式下拉框中的某一字体样式时,文本域中的文字设置为指定的字
体样式。
当选择字体大小下拉框中的某一字体大小时,文本域中的文字设置为指定的字
体大小。
当选择窗体样式下拉框中的某一窗体效果时,窗体外观改变为指定的窗体外观。
图1程序界面运行效果
packageSy;
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
publicclassArtFontextendsJFrame{
staticArtFontartFont;
JComboBoxfontType;//字体样式下拉框
JComboBoxfontSize;//字体大小下拉框
JComboBoxwindowStyle;//窗体样式下拉框
JCheckBoxboldBx;//粗体按钮
JCheckBoxitalicBx;//斜体按钮
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(){
@Override
publicvoiditemStateChanged(ItemEvente){
//加粗
if(e.getStateChange()==ItemEvent.SELECTED)
boldStyle=1;
else
boldStyle=0;
font=newFont(fontNameStyle,boldStyle+italicStyle,fontSizeStyle);
txtArea.setFont(font);
}
});
italicBx.addItemListener(newItemListener(){
@Override
publicvoiditemStateChanged(ItemEvente){
//斜体
if(e.getStateChange()==ItemEvent.SELECTED)
italicStyle=1;
else
italicStyle=0;
font=newFont(fontNameStyle,boldStyle+italicStyle,fontSizeStyle);
txtArea.setFont(font);
}
});
colorBtn.addActionListener(newActionListener(){
@Override
publicvoidactionPerformed(ActionEvente){
//改变颜色
colorStyle=JColorChooser.showDialog(null,"请选择一种颜色",colorStyle);
colorBtn.setForeground(colorStyle);
txtArea.setForeground(colorStyle);
font=newFont(fontNameStyle,boldStyle+italicStyle,fontSizeStyle);
txtArea.setFont(font);
}
});
panel.add(label);
panel.add(inputText);
panel.add(boldBx);
panel.add(italicBx);
panel.add(colorBtn);
returnpanel;
}
privateJPanelgetCenterPanel(){
JPanelpanel=newJPanel();
panel.setLayout(newBorderLayout());
txtArea=newJTextArea();
panel.add(newJScrollPane(txtArea),BorderLayout.CENTER);
returnpanel;
}
privateJPanelgetSouthPanel(){
JPanelpanel=newJPanel();
//获得系统默认字体
GraphicsEnvironmentge=GraphicsEnvironment.getLocalGraphicsEnvironment();
fontNames=ge.getAvailableFontFamilyNames();
fontType=newJComboBox(fontNames);
//设置字体大小
fontSizes=newString[63];
for(inti=0;i 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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 Java 事件 处理