《Java程序设计试验6学生版 .doc》由会员分享,可在线阅读,更多相关《Java程序设计试验6学生版 .doc(21页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、华北电力大学实 验 报 告| 实验名称 Application及Applet程序设计 课程名称 Java程序设计 | 专业班级: 学生姓名: 学 号: 成 绩:指导教师:张学斌 实验日期:一、实验目的和要求1掌握Java Swing 组件的使用方法;2 理解委托代理事件处理模型掌握;3 掌握窗口菜单和快捷菜单设计方式;4 掌握在组件上绘图的方法;5 掌握Applet应用程序的设计方法二、实验环境Windows2000/Windows XP,JDK 1.21.6 三、实验内容和步骤要求按照实验内容,写出详细实验过程和步骤,必要时截图。实验1 算术测试1.实验要求 编写一个算术测试小软件,用来训练
2、小学生的算术能力。程序有三个类组成,其中Teacher对象充当监视器,负责给出算术题目,并判断回答者的答案是否正确;ComputerFrame对象负责为算术题目提供视图,比如用户可以通过ComputerFrame对象提供的GUI界面看到题目,并通过GUI界面给出题目的答案;MailClass是软件的主类。2.程序模板 public class MainClass public static void main(String args) ComputerFrame frame; frame=new ComputerFrame(); tle(算术测试); unds(100,100,650,180)
3、; import .*;import .event.*;import .*;public class ComputerFrame extends JFrame JMenuBar menubar; JMenu choiceGrade; /选择级别的菜单 JMenuItem grade1,grade2; JTextField textOne,textTwo,textResult; JButton getProblem,giveAnwser; JLabel operatorLabel,message; Teacher teacherZhang; ComputerFrame() teacherZhan
4、g=new Teacher(); xInteger(20); setLayout(new FlowLayout(); menubar = new JMenuBar(); choiceGrade = new JMenu(选择级别); grade1 = new JMenuItem(幼儿级别); grade2 = new JMenuItem(儿童级别); tionListener(new ActionListener() public void actionPerformed(ActionEvent e) xInteger(10); ); tionListener(new ActionListene
5、r() public void actionPerformed(ActionEvent e) xInteger(50); ); (grade1); (grade2); (choiceGrade); setJMenuBar(menubar); 【代码1】 /创建textOne,其可见字符长是5 textTwo=new JTextField(5); textResult=new JTextField(5); operatorLabel=new JLabel(+); nt(new Font(Arial,20); message=new JLabel(你还没有回答呢); getProblem=new
6、JButton(获取题目); giveAnwser=new JButton(确认答案); add(getProblem); add(textOne); add(operatorLabel); add(textTwo); add(new JLabel(=); add(textResult); add(giveAnwser); add(message); stFocus(); itable(false); itable(false); tionCommand(getProblem); tionCommand(answer); tionCommand(answer); extField(textOn
7、e,textTwo,textResult); abel(operatorLabel,message); 【代码2】/将teacherZhang注册为getProblem的ActionEvent事件监视器 【代码3】/将teacherZhang注册为giveAnwser的ActionEvent事件监视器 【代码4】/将teacherZhang注册为textResult的ActionEvent事件监视器 setVisible(true); validate(); setDefaultCloseOperation(DISPOSE_ON_CLOSE); import .Random;import .e
8、vent.*;import .*;public class Teacher implements ActionListener int numberOne,numberTwo; String operator=; boolean isRight; Random random; /用于给出随机数 int maxInteger; /题目中最大的整数 JTextField textOne,textTwo,textResult; JLabel operatorLabel,message; Teacher() random = new Random(); public void setMaxIntege
9、r(int n) maxInteger=n; public void actionPerformed(ActionEvent e) String str = e.getActionCommand(); if(s(getProblem) numberOne = nt(maxInteger)+1;/1至maxInteger之间的随机数; numberTwo=nt(maxInteger)+1; double d=m(); / 获取(0,1)之间的随机数 if(d=0.5) operator=+; else operator=-; xt(+numberOne); xt(+numberTwo); xt(
10、operator); xt(请回答); xt(null); else if(s(answer) String answer=xt(); try int result=Int(answer); if(s(+) if(result=numberOne+numberTwo) xt(你回答正确); else xt(你回答错误); else if(s(-) if(result=numberOne-numberTwo) xt(你回答正确); else xt(你回答错误); catch(NumberFormatException ex) xt(请输入数字字符); public void setJTextFi
11、eld(JTextField . t) textOne=t0; textTwo=t1; textResult=t2; public void setJLabel(JLabel .label) operatorLabel=label0; message=label1; 3.实验指导 Jbutton对象可触发ActionEvent事件。为了能监视到此类事件,事件源必须使用addActionListener方法获得监视器,创建监视器的类必须实现接口ActionListener。4.实验扩展 (1)模仿本实验代码,再增加“小学生”级别。 (2)给出上述程序增加测试乘法的功能。实验2 布局与日历1. 实
12、验要求编写一个应用程序,有一个窗口,该窗口的布局为BorderLayout布局。窗口的中心添加一个JPanel容器pCenter, pCenter的布局是7行7列的GriderLayout布局,pCenter中放置49个标签,用来显示日历。窗口的北面添加一个JPanel容器pNorth,其布局是FlowLayout布局,pNorth放置两个按钮:nextMonth和previousMonth。单击nextMonth按钮,可以显示当前月的下一月的日历;单击previousMonth按钮,可以显示当前月的上一月的日历;窗口的南面添加一个Jpanel容器pSouth,其布局是FlowLayout布局
13、,pSouth中放置一个标签用来显示一些信息。2.程序模板 public class CalendarMainClass public static void main(String args) CalendarFrame frame=new CalendarFrame(); unds(100,100,360,300); sible(true); arAndMonth(2015,5); import .Calendar;public class CalendarBean String day; int year=2005,month=0; public void setYear(int yea
14、r) =year; public int getYear() return year; public void setMonth(int month) =month; public int getMonth() return month; public String getCalendar() String a=new String42; Calendar 日历=stance(); 日历.set(year,month-1,1); int 星期几=日历.get(_OF_WEEK)-1; int day=0; if(month=1|month=3|month=5|month=7|month=8|m
15、onth=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(int i=星期几,n=1;i星期几+day;i+) ai=Of(n) ; n+; return a; import .*;import .*;import .event.*;import .*;import .border.*;public class CalendarFrame extends JF
16、rame implements ActionListener JLabel labelDay=new JLabel42; JButton titleName=new JButton7; String name=日,一,二,三, 四,五,六; JButton nextMonth,previousMonth; CalendarBean calendar; JLabel showMessage=new JLabel(,R); int year=2011,month=2; public CalendarFrame() JPanel pCenter=new JPanel(); 【代码1】 /将pCent
17、er的布局设置为7行7列的GridLayout 布局。 for(int i=0;i7;i+) titleNamei=new JButton(namei); titleNamei.setBorder(new SoftBevelBorder(D); (titleNamei); for(int i=0;i42;i+) labelDayi=new JLabel(,R); labelDayi.setBorder(new SoftBevelBorder(ED); 【代码2】/pCenter添加组件labelDayi。 calendar=new CalendarBean(); nextMonth=new J
18、Button(下月); previousMonth=new JButton(上月); tionListener(this); tionListener(this); JPanel pNorth=new JPanel(), pSouth=new JPanel(); (previousMonth); (nextMonth); (showMessage); add(pCenter,R); 【代码3】 / 窗口添加pNorth 在北面区域 【代码4】 / 窗口添加pSouth 在南区域。 setYearAndMonth(year,month); setDefaultCloseOperation(DIS
19、POSE_ON_CLOSE); public void setYearAndMonth(int y,int m) ar(y); nth(m); String day=lendar(); for(int i=0;i12) month=1; nth(month); String day=lendar(); for(int i=0;i42;i+) labelDayi.setText(dayi); else if(e.getSource()=previousMonth) month=month-1; if(month1) month=12; nth(month); String day=lendar(
20、); for(int i=0;i42;i+) labelDayi.setText(dayi); xt(日历:+ar()+年+nth()+月 ); 3.实验扩展 在CalendarFrame类中增加一个JTextField文本框,用户可以通过在文本框中输入年份来修改calendar对象的int成员year实验3 英语单词拼写训练1.实验要求 编写一个应用程序,要求如下:l 窗口有一个TextField对象和一个按钮对象,将这两个对象添加到一个面板中,然后将该面板添加到窗口的上面。l 用户在TextField对象中输入一个英文单词,然后按Enter或单击“确定”按钮,程序将创建若干个不可编辑的文本
21、框,每个文本框随机显示英文单词中的一个字母。要求将这些文本框按一行添加到一个面板中,然后将该面板添加到窗口的中心。l 用户用鼠标单击一个文本框后,通过按下键盘上的“”和“”键交换相邻文本框中的字母,使得这些文本框中的字母的排列顺序和英文单词中字母的顺序相同。2.程序模板 public class WordMainClass public static void main(String args) new SpellingWordFrame(); -public class RondomString /负责随机排列单词中的字母 String str=; public String getRond
22、omString(String s) StringBuffer strBuffer=new StringBuffer(s); int m=h(); for(int k=0;km;k+) int index=(int)(m()*h();/m()返回(0,1)之间的随机数 char c=t(index); str=str+c; strBuffer=eCharAt(index); return str; -import .*;import .event.*;import .*;public class LetterLabel extends JTextField implements FocusLi
23、stener LetterLabel() setEditable(false); addFocusListener(this);/【代码1】 /将当前对象注册为自身的焦点视器 setBackground(); setFont(new Font(Arial,30); public static LetterLabel getLetterLabel(int n) LetterLabel a=new LetterLabeln; for(int k=0;k0) label=tterLabel(n); for(int k=0;kh;k+) labelk.setText(+t(k); (labelk);
24、【代码2】 /将当前窗口注册为labelk的键盘监视器 validate(); xt(null); label0.requestFocus(); public void keyPressed(KeyEvent e) LetterLabel sourceLabel=(LetterLabel)e.getSource(); int index=-1; if(e.getKeyCode()=_LEFT) for(int k=0;kh;k+) if(labelk=sourceLabel) index=k; break; if(index!=0) /交换文本框中的字母 String temp=labelin
25、dex.getText(); labelindex.setText(labelindex-1.getText(); labelindex-1.setText(temp); labelindex-1.requestFocus(); else if(【代码3】) /判断按下的是否是键 for(int k=0;kh;k+) if(labelk=sourceLabel) index=k; break; if(index!=h-1) String temp=labelindex.getText(); labelindex.setText(labelindex+1.getText(); labelinde
26、x+1.setText(temp); labelindex+1.requestFocus(); validate(); public void keyTyped(KeyEvent e) public void keyReleased(KeyEvent e) String success=; for(int k=0;kh;k+) String str=labelk.getText(); success=success+str; if(s(word) xt(恭喜你,你成功了); for(int k=0;kh;k+) labelk.removeKeyListener(this); labelk.re
27、moveFocusListener(labelk); labelk.setBackground(); stFocus(); 3.实验扩展 增加记录用户移动字母次数的功能,即当用户拼写成功后,messageLabel标签显示的信息中包含用户移动字母的次数。实验4 字体对话框1.实验要求编写一个FontFamily类,该类对象可以获取当前机器可用的全部字体名称。 编写一个JDialog的子类FontDialog,该类为FontFamily对象维护的数据提供视图,要求FontDialog对象使用下拉列表显示FontFamily对象维护的全部字体的名称,当选择下拉列表中某个字体名称后,FontDial
28、og对象用标签显示该字体的效果。要求对话框提供返回下拉列表中所选择的字体名称的方法。 编写一个窗口,该窗口中有“设置字体”按钮和一文本区对象,当单击该按钮时,弹出一个FontDialog创建的对话框,然后根据用户在对话框下拉列表中选择的字体来显示文本区中的文本。2.程序模板 public class FontDialogMainClass public static void main(String args) FrameHaveDialog win=new FrameHaveDialog(); - import .GraphicsEnvironment;public class FontFa
29、milyNames String allFontNames; public String getFontName() GraphicsEnvironment ge=calGraphicsEnvironment(); allFontNames=ge.getAvailableFontFamilyNames(); return allFontNames; - import .event.*;import .*;import .*;public class FontDialog extends JDialog implements ItemListener,ActionListener FontFamilyNames fontFamilyNames; int fontSize=38; String fontName; JComboBox fontNameList,fontSizeList; JLabel label; Font font; JButton yes,cancel; static int YES=1,NO=0; int state=-1; FontDialog(JFrame f)
限制150内