Java程序设计_试验6(学生版)_第1页
Java程序设计_试验6(学生版)_第2页
Java程序设计_试验6(学生版)_第3页
Java程序设计_试验6(学生版)_第4页
Java程序设计_试验6(学生版)_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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.程序模板 MainClass.javapublic class MainClass public static void main(String args) ComputerFrame frame; frame=new ComputerFrame();

3、 frame.setTitle(算术测试); frame.setBounds(100,100,650,180); ComputerFrame.java import java.awt.*;import java.awt.event.*;import javax.swing.*;public class ComputerFrame extends JFrame JMenuBar menubar; JMenu choiceGrade; /选择级别的菜单 JMenuItem grade1,grade2; JTextField textOne,textTwo,textResult; JButton g

4、etProblem,giveAnwser; JLabel operatorLabel,message; Teacher teacherZhang; ComputerFrame() teacherZhang=new Teacher(); teacherZhang.setMaxInteger(20); setLayout(new FlowLayout(); menubar = new JMenuBar(); choiceGrade = new JMenu(选择级别); grade1 = new JMenuItem(幼儿级别); grade2 = new JMenuItem(儿童级别); grade

5、1.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) teacherZhang.setMaxInteger(10); ); grade2.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) teacherZhang.setMaxInteger(50); ); choiceGrade.add(grade1); choiceGrade.add(grade2); menubar

6、.add(choiceGrade); setJMenuBar(menubar); 【代码1】 /创建textOne,其可见字符长是5 textTwo=new JTextField(5); textResult=new JTextField(5); operatorLabel=new JLabel(+); operatorLabel.setFont(new Font(Arial,Font.BOLD,20); message=new JLabel(你还没有回答呢); getProblem=new JButton(获取题目); giveAnwser=new JButton(确认答案); add(ge

7、tProblem); add(textOne); add(operatorLabel); add(textTwo); add(new JLabel(=); add(textResult); add(giveAnwser); add(message); textResult.requestFocus(); textOne.setEditable(false); textTwo.setEditable(false); getProblem.setActionCommand(getProblem); textResult.setActionCommand(answer); giveAnwser.se

8、tActionCommand(answer); teacherZhang.setJTextField(textOne,textTwo,textResult); teacherZhang.setJLabel(operatorLabel,message); 【代码2】/将teacherZhang注册为getProblem的ActionEvent事件监视器 【代码3】/将teacherZhang注册为giveAnwser的ActionEvent事件监视器 【代码4】/将teacherZhang注册为textResult的ActionEvent事件监视器 setVisible(true); valid

9、ate(); setDefaultCloseOperation(DISPOSE_ON_CLOSE); Techaer.javaimport java.util.Random;import java.awt.event.*;import javax.swing.*;public class Teacher implements ActionListener int numberOne,numberTwo; String operator=; boolean isRight; Random random; /用于给出随机数 int maxInteger; /题目中最大的整数 JTextField

10、textOne,textTwo,textResult; JLabel operatorLabel,message; Teacher() random = new Random(); public void setMaxInteger(int n) maxInteger=n; public void actionPerformed(ActionEvent e) String str = e.getActionCommand(); if(str.equals(getProblem) numberOne = random.nextInt(maxInteger)+1;/1至maxInteger之间的随

11、机数; numberTwo=random.nextInt(maxInteger)+1; double d=Math.random(); / 获取(0,1)之间的随机数 if(d=0.5) operator=+; else operator=-; textOne.setText(+numberOne); textTwo.setText(+numberTwo); operatorLabel.setText(operator); message.setText(请回答); textResult.setText(null); else if(str.equals(answer) String answ

12、er=textResult.getText(); try int result=Integer.parseInt(answer); if(operator.equals(+) if(result=numberOne+numberTwo) message.setText(你回答正确); else message.setText(你回答错误); else if(operator.equals(-) if(result=numberOne-numberTwo) message.setText(你回答正确); else message.setText(你回答错误); catch(NumberForma

13、tException ex) message.setText(请输入数字字符); public void setJTextField(JTextField . t) textOne=t0; textTwo=t1; textResult=t2; public void setJLabel(JLabel .label) operatorLabel=label0; message=label1; 3.实验指导 Jbutton对象可触发ActionEvent事件。为了能监视到此类事件,事件源必须使用addActionListener方法获得监视器,创建监视器的类必须实现接口ActionListener

14、。4.实验扩展 (1)模仿本实验代码,再增加“小学生”级别。 (2)给出上述程序增加测试乘法的功能。实验2 布局与日历1. 实验要求编写一个应用程序,有一个窗口,该窗口的布局为BorderLayout布局。窗口的中心添加一个JPanel容器pCenter, pCenter的布局是7行7列的GriderLayout布局,pCenter中放置49个标签,用来显示日历。窗口的北面添加一个JPanel容器pNorth,其布局是FlowLayout布局,pNorth放置两个按钮:nextMonth和previousMonth。单击nextMonth按钮,可以显示当前月的下一月的日历;单击previous

15、Month按钮,可以显示当前月的上一月的日历;窗口的南面添加一个Jpanel容器pSouth,其布局是FlowLayout布局,pSouth中放置一个标签用来显示一些信息。2.程序模板 CalendarMainClass.javapublic class CalendarMainClass public static void main(String args) CalendarFrame frame=new CalendarFrame(); frame.setBounds(100,100,360,300); frame.setVisible(true); frame.setYearAndMo

16、nth(2015,5); CalendarBean.javaimport 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 get

17、Calendar() String a=new String42; 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)&(year%100!=0)|(

18、year%400=0) day=29; else day=28; for(int i=星期几,n=1;i星期几+day;i+) ai=String.valueOf(n) ; n+; return a; CalendarFrame.javaimport java.util.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.border.*;public class CalendarFrame extends JFrame implements ActionListener JLa

19、bel labelDay=new JLabel42; JButton titleName=new JButton7; String name=日,一,二,三, 四,五,六; JButton nextMonth,previousMonth; CalendarBean calendar; JLabel showMessage=new JLabel(,JLabel.CENTER); int year=2011,month=2; public CalendarFrame() JPanel pCenter=new JPanel(); 【代码1】 /将pCenter的布局设置为7行7列的GridLayou

20、t 布局。 for(int i=0;i7;i+) titleNamei=new JButton(namei); titleNamei.setBorder(new SoftBevelBorder(BevelBorder.RAISED); pCenter.add(titleNamei); for(int i=0;i42;i+) labelDayi=new JLabel(,JLabel.CENTER); labelDayi.setBorder(new SoftBevelBorder(BevelBorder.LOWERED); 【代码2】/pCenter添加组件labelDayi。 calendar=

21、new CalendarBean(); nextMonth=new JButton(下月); previousMonth=new JButton(上月); nextMonth.addActionListener(this); previousMonth.addActionListener(this); JPanel pNorth=new JPanel(), pSouth=new JPanel(); pNorth.add(previousMonth); pNorth.add(nextMonth); pSouth.add(showMessage); add(pCenter,BorderLayout

22、.CENTER); 【代码3】 / 窗口添加pNorth 在北面区域 【代码4】 / 窗口添加pSouth 在南区域。 setYearAndMonth(year,month); setDefaultCloseOperation(DISPOSE_ON_CLOSE); public void setYearAndMonth(int y,int m) calendar.setYear(y); calendar.setMonth(m); String day=calendar.getCalendar(); for(int i=0;i12) month=1; calendar.setMonth(mont

23、h); String day=calendar.getCalendar(); for(int i=0;i42;i+) labelDayi.setText(dayi); else if(e.getSource()=previousMonth) month=month-1; if(month1) month=12; calendar.setMonth(month); String day=calendar.getCalendar(); for(int i=0;i42;i+) labelDayi.setText(dayi); showMessage.setText(日历:+calendar.getY

24、ear()+年+calendar.getMonth()+月 ); 3.实验扩展 在CalendarFrame类中增加一个JTextField文本框,用户可以通过在文本框中输入年份来修改calendar对象的int成员year实验3 英语单词拼写训练1.实验要求 编写一个应用程序,要求如下:l 窗口有一个TextField对象和一个按钮对象,将这两个对象添加到一个面板中,然后将该面板添加到窗口的上面。l 用户在TextField对象中输入一个英文单词,然后按Enter或单击“确定”按钮,程序将创建若干个不可编辑的文本框,每个文本框随机显示英文单词中的一个字母。要求将这些文本框按一行添加到一个面板

25、中,然后将该面板添加到窗口的中心。l 用户用鼠标单击一个文本框后,通过按下键盘上的“”和“”键交换相邻文本框中的字母,使得这些文本框中的字母的排列顺序和英文单词中字母的顺序相同。2.程序模板 WordMainClass.javapublic class WordMainClass public static void main(String args) new SpellingWordFrame(); -RondomString.javapublic class RondomString /负责随机排列单词中的字母 String str=; public String getRondomStr

26、ing(String s) StringBuffer strBuffer=new StringBuffer(s); int m=strBuffer.length(); for(int k=0;km;k+) int index=(int)(Math.random()*strBuffer.length();/Math.random()返回(0,1)之间的随机数 char c=strBuffer.charAt(index); str=str+c; strBuffer=strBuffer.deleteCharAt(index); return str; -LetterLabel.javaimport

27、java.awt.*;import java.awt.event.*;import javax.swing.*;public class LetterLabel extends JTextField implements FocusListener LetterLabel() setEditable(false); addFocusListener(this);/【代码1】 /将当前对象注册为自身的焦点视器 setBackground(Color.white); setFont(new Font(Arial,Font.PLAIN,30); public static LetterLabel g

28、etLetterLabel(int n) LetterLabel a=new LetterLabeln; for(int k=0;k0) label=LetterLabel.getLetterLabel(n); for(int k=0;klabel.length;k+) labelk.setText(+randomWord.charAt(k); wordBox.add(labelk); 【代码2】 /将当前窗口注册为labelk的键盘监视器 validate(); inputWord.setText(null); label0.requestFocus(); public void keyPr

29、essed(KeyEvent e) LetterLabel sourceLabel=(LetterLabel)e.getSource(); int index=-1; if(e.getKeyCode()=KeyEvent.VK_LEFT) for(int k=0;klabel.length;k+) if(labelk=sourceLabel) index=k; break; if(index!=0) /交换文本框中的字母 String temp=labelindex.getText(); labelindex.setText(labelindex-1.getText(); labelindex

30、-1.setText(temp); labelindex-1.requestFocus(); else if(【代码3】) /判断按下的是否是键 for(int k=0;klabel.length;k+) if(labelk=sourceLabel) index=k; break; if(index!=label.length-1) String temp=labelindex.getText(); labelindex.setText(labelindex+1.getText(); labelindex+1.setText(temp); labelindex+1.requestFocus()

31、; validate(); public void keyTyped(KeyEvent e) public void keyReleased(KeyEvent e) String success=; for(int k=0;klabel.length;k+) String str=labelk.getText(); success=success+str; if(success.equals(word) messaageLabel.setText(恭喜你,你成功了); for(int k=0;klabel.length;k+) labelk.removeKeyListener(this); l

32、abelk.removeFocusListener(labelk); labelk.setBackground(Color.white); inputWord.requestFocus(); 3.实验扩展 增加记录用户移动字母次数的功能,即当用户拼写成功后,messageLabel标签显示的信息中包含用户移动字母的次数。实验4 字体对话框1.实验要求编写一个FontFamily类,该类对象可以获取当前机器可用的全部字体名称。 编写一个JDialog的子类FontDialog,该类为FontFamily对象维护的数据提供视图,要求FontDialog对象使用下拉列表显示FontFamily对象维

33、护的全部字体的名称,当选择下拉列表中某个字体名称后,FontDialog对象用标签显示该字体的效果。要求对话框提供返回下拉列表中所选择的字体名称的方法。 编写一个窗口,该窗口中有“设置字体”按钮和一文本区对象,当单击该按钮时,弹出一个FontDialog创建的对话框,然后根据用户在对话框下拉列表中选择的字体来显示文本区中的文本。2.程序模板 FontDialogMainClass.javapublic class FontDialogMainClass public static void main(String args) FrameHaveDialog win=new FrameHaveD

34、ialog(); - FontFamilyNames.javaimport java.awt.GraphicsEnvironment;public class FontFamilyNames String allFontNames; public String getFontName() GraphicsEnvironment ge=GraphicsEnvironment.getLocalGraphicsEnvironment(); allFontNames=ge.getAvailableFontFamilyNames(); return allFontNames; - FontDialog.

35、javaimport java.awt.event.*;import java.awt.*;import javax.swing.*;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; stati

36、c int YES=1,NO=0; int state=-1; FontDialog(JFrame f) super(f); setTitle(字体对话框); font=new Font(宋体,Font.PLAIN,12); fontFamilyNames=new FontFamilyNames(); 【代码1】 /当前对话框调用setModal(boolean b)设置为有模式 yes=new JButton(Yes); cancel=new JButton(cancel); yes.addActionListener(this); cancel.addActionListener(this

37、); label=new JLabel(hello,奥运,JLabel.CENTER); fontNameList=new JComboBox(); fontSizeList=new JComboBox(); String name=fontFamilyNames.getFontName(); fontNameList.addItem(字体); for(int k=0;kname.length;k+) fontNameList.addItem(namek); fontSizeList.addItem(大小); for(int k=8;k72;k=k+2) fontSizeList.addIte

38、m(new Integer(k); fontNameList.addItemListener(this); fontSizeList.addItemListener(this); JPanel pNorth=new JPanel(); pNorth.add(fontNameList); pNorth.add(fontSizeList); add(pNorth,BorderLayout.NORTH); add(label,BorderLayout.CENTER); JPanel pSouth=new JPanel(); pSouth.add(yes); pSouth.add(cancel); add(pSouth,BorderLayout.SOUTH); setBounds(100,100,280,170); setDefaultCloseOperation(DISPOSE_ON

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论