第一篇:java实验 报告(写写帮整理)
专业选修课程实验(1)实验报告
课程名称____ JAVA程序设计 学生学院__ 计算机学院______ 专业班级___ 12计科6班 学 号____ 3112006006 学生姓名____ 黄新健 指导教师______ 黄剑锋
2014 年 12 月 16 日
实验一:Java语言综述
一、实验目的与要求
1、熟悉安装和配置JDK开发环境。
2、熟悉安装和配置IDE开发工具。
3、掌握Java程序编辑、编译和运行的过程。
4、掌握Java程序的构成特点。
5、总结在调试过程中的错误。
二、实验类型
验证型
三、实验原理及说明
通过实际操作,使学生对Java语言的使用有一个更深刻的理解;熟悉Java的开发环境及程序结构。
四、实验仪器
安装JDK及Java IDE的计算机若干台
五、实验内容和步骤
1、下载、安装并设置 Java SDK 软件包。
2、安装 Java IDE软件。
3、编写一个简单的 Java 程序,运行结果为在屏幕上输出“HELLO WORLD!”。public class Hello{ public static void main(String args[]){ System.out.println(“HELLO WORLD!”);} }
心得:该程序主要是让我们懂得怎么样编写一个简单java程序,使我们在日后的程序过程中对java编程有基本的认识和了解。
六、注意事项
Java源程序文件的命名规则。
七、预习与思考题
1、什么是Java虚拟机?它的作用是什么? 答:含义:Java虚拟机是一个想象中的机器,在实际的计算机上通过软件模拟来实现。Java虚拟机有自己想象中的硬件,如处理器、堆栈、寄存器等,还具有相应的指令系统。
作用:生成在Java虚拟机上运行的目标代码(字节码),可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,能把字节码解释成具体平台上的机器指令执行。
2、如何在不同的环境下设置环境变量?
答:用鼠标右击“我的电脑”->属性->高级->环境变量系统变量->新建->变量名:JAVA_HOME 变量值:JDK安装的路径
系统变量->编辑->变量名:Path 在变量值的最前面加上:%JAVA_HOME%bin;(若已经有Path项,无须另外新建,直接在后面加,但需用;与前面已有的项分隔开)
系统变量->新建->变量名:CLASSPATH 变量值:.;%JAVA_HOME%lib;%JAVA_HOME%libdt.jar;%JAVA_HOME%libtools.jar;最后测试下环境变量是否设置成功
3、Java Application和Java Applet的不同之处?
答:运行方式不同、运行工具不同、程序结构不同、受到的限制不同
实验二:Java语言基础
一、实验目的与要求
1、掌握 Java 基本数据类型、运算符与表达式、数组和字符串的使用方法。
2、掌握各种变量的声明方式。
3、理解 Java 程序语法结构,掌握顺序结构、选择结构和循环结构语法的程序设计方法。
4、通过以上内容,掌握 Java 语言的编程规则。
5、了解Java程序文件名和类名的说明方法。
二、实验类型
设计型
三、实验原理及说明 Java语言基础包括数据类型、运算符、表达式、流程控制、数组、字符串等,是类内方法设计实现的基础。面向对象程序设计的核心是类和类内方法的设计,其中类内方法的设计依然需要传统的面向过程的方法进行。
四、实验仪器
安装JDK及Java IDE的计算机若干台
五、实验内容和步骤
1、编写声明不同数据类型变量的程序文件 Java2_1.java,源代码如下: public class Java2_1{ public static void main(String args[]){ byte b=0x55;short s=0x55ff;int i=1000000;long l=0xffffL;char c='a';float f=0.23F;double d=0.7E-3;boolean B=true;String S=“这是字符串类数据类型”;System.out.println(“字节型变量 b = ”+b);System.out.println(“短整型变量 s = ”+s);System.out.println(“整型变量 i = ”+i);System.out.println(“长整型变量 l = ”+l);System.out.println(“字符型变量 c = ”+c);System.out.println(“浮点型变量 f = ”+f);System.out.println(“双精度变量 d = ”+d);System.out.println(“布尔型变量 B = ”+B);System.out.println(“字符串类对象 S = ”+S);} } 编译并运行该程序。
心得:主要让我们了解到不同数据的类型及他们定义的方式,通过运行结果截图让我对不同的数据类型有了更明显的认识。
2、建立 Java2_2.java 文件,通过本程序了解变量的使用范围,源代码如下。
public class Java2_2{ static int i=10;public static void main(String args[]){ { int k=10;System.out.println(“i=”+i);System.out.println(“k=”+k);} System.out.println(“i=”+i);System.out.println(“k=”+k);//编译时将出错,已出k的使用范围 } } 结果:运行时出现错,编译不成功。
编译 Java2_2.java,此时会出现错误提示。因为变量 k 在方法块中声明,在方法块之外它是不存在的,所以编译时会出错。
修改上面的程序,并成功运行该程序。
public class Java2_2.java { static int i=10;static int k=10;public static void main(String args[]){ {
System.out.println(“i=”+i);System.out.println(“k=”+k);} System.out.println(“i=”+i);System.out.println(“k=”+k);} }
分析:因定义的k只有在其方法块了内可以使用,而在其方法块之外是不可能使用,经过修改,我把变量k定义到了main函数上面,这样在任意的方法块内都可以使用k这个变量。
3、运行下面的程序,理解String类常用方法的使用。public class 2_4{ public static void main(String args[]){ String str=”I like java programming”;int i1=str.indexOf(‘j’);String s1=str.substring(i1);String s2=str.substring(i1,i1+4);int i2=str.lastIndexOf(‘j’);String s3=str.substring(i2+5);System.out.println(“s1=”+s1);System.out.println(“s2=”+s2);System.out.println(“s3=”+s3);} }
心得: 通过运行以及参考运行结果,让我对String类常用方法有了进一步了解,也让我学习到更多String类方法。
4、(选做)编程采用冒泡法实现对数组元素由小到大排序,冒泡法排序对相邻的两个元素进行比较,并把小的元素交换到前面。class MySort {
public static void main(String[] args){
MySort sort = new MySort();
int[] arr = new int[]{1,22,101,5,250,99,20,22,50};
sort.sort(arr);
for(int i : arr){
System.out.print(i+“,”);
}
}
public void sort(int[] a){
int temp = 0;
for(int i = 0;i for(int j = i;j if(a[i]>a[j]){ temp = a[i]; a[i] = a[j]; a[j] = temp; } } } } } 分析:该程序主要用的算法是冒泡法,通过冒泡法把定义好的数组的元素按小到大输出,其实涉及的内容还是很基本的,过程没花费很多时间。 5、(选做)数组实验:利用数组解决约瑟夫环问题。设有n个人围做一圈并按顺时针方向从1到n编号,从第s个人开始进行1到m报数,报数到第m的人出圈,再从其下一个人重新开始从1到m的报数,如此进行下去知道所有的人都出圈为止。给出这n个人出圈的顺序。import java.util.Scanner;class yue{ public static void main(String[] args){ } } System.out.println(“请输入人数:”);Scanner sca=new Scanner(System.in);int m=sca.nextInt();System.out.println(“请输入从第几个人报数::”);int s=sca.nextInt();int[] a=new int[m];int length=m;for(int i=0;i if(j%m==0){ System.out.print(a[i%m]+“"); a[i%m]=-1; j=1; i++; length--; } else{ j++; i++;} } else{ i++;} } 体会:该程序比较灵活,可以任意输入人数、从第几个人开始报数。这里没用队列知识,而是直接利用数组得到出圈人顺序。主要思想通过循环把数到规定数字的人的值设为-1并输出(表示出圈),在下次循环中只要判断各个数组的值是否大于0,是的话则判断是否数到规定数字。否则跳过该元素,判断下一个数。 Java语言中的数组与C语言中的数组差别。 七、预习与思考题 1、定义变量的作用是什么? 答:确定变量的作用域,按作用域的不同,变量可以分为成员变量、局部变量和方法的参数。 2、&和&&有什么区别? 答:&是位与,一般用于取字节位数,不管怎样都会执行&两边的程序。&&是且,一般用于判断语句的双重条件,只有&&左边为TRUE才会执行右边的程序。 3、break和continue在流程控制中的作用是什么? 答:具体循环中break的作用是终止执行下面语句并跳出循环。 而continue作用是跳过下面语句进行下一次循环。 实验三:面向对象编程 一、实验目的与要求 1、理解 Java 语言是如何体现面向对象编程基本思想。 2、了解类的封装方法,以及如何创建类和对象。 3、掌握成员变量和成员方法的特性及构造方法使用。 4、熟练掌握 OOP 方式进行程序设计的方法,理解类的继承性和多态性的作用。 二、实验类型 设计型 三、实验原理及说明 Java语言中引入了类,因此在程序设计中可以把数据及对数据的操作封装在一起;类可以从其他类中继承数据和方法。 四、实验仪器 安装JDK及Java IDE的计算机若干台 五、实验内容和步骤 1、定义一个“圆”类Circle,该圆类的数据成员包括:圆心点位置及圆的半径;方 法成员有:设置圆心位置和半径的方法,获取圆心位置和半径的方法及构造方法。要求构造方法可以接收圆心位置参数,而半径使用缺省值1。编写完整的程序并 创建Circle类的对象,并且分别调用各种方法,对比这些方法的执行结果,并据 此写出详细的实验报告。class Circle{ double x,y,r; //x,y分别表示圆心横纵坐标 void Setmid(double a,double b){ x=a; y=b; return;} void Sethalf(double rr){ r=rr;return;} void Getmid(){ System.out.println(”x=“+ x); System.out.println(”y=“+ y);} double Gethalf(){ return r;} public static void main(String args[]){ Circle c=new Circle(); c.Setmid(5.0,6.0);//设圆心位置 c.Sethalf(1.0); //设半径长度 c.Getmid(); //获取圆心位置 System.out.println(”半径=“+c.Gethalf());//获取半径长度 } } 分析:主要是考察关于创建类、方法以及调用的类中方法的知识。创建编写出的圆类并给其中方法设置初始值x=5.0,y=6.0,半径=1.0,运行程序即可得到上述图片的结果。本程序不足之处就是不可以任意输入圆心坐标以及半径。 2、定义以上圆类Circle的子类SubCircle,使它具有获取半径方法、设置半径方 法和构造方法,要求构造方法可同时接收圆心位置及半径两个参数。编写完整的 程序并创建SubCircle类的对象,并且分别调用各种方法,对比这些方法的执行 结果,并据此写出详细的实验报告。实验代码: class Circle{ double x,y,r; //x,y分别表示圆心横纵坐标 void Setmid(double a,double b){ x=a; y=b; return;} void Sethalf(double rr){ r=rr;return;} void Getmid(){ System.out.println(”x=“+ x); System.out.println(”y=“+ y);} void Gethalf(){ System.out.println(”半径=“+ r);} } class SubCircle extends Circle{ void Getmnh(){ //同时获取远点和半径构造方法 Getmid(); Gethalf();} public static void main(String args[]){ SubCircle c=new SubCircle(); c.Setmid(5.0,6.0);//设圆心位置 c.Sethalf(1.0); //设半径长度 c.Getmnh(); //同时获取圆心位置和半径长度 } } 结果截图: 体会:本实验跟上述实验有些不同,另外写了一个类,声明一种方法Getmnh()同时获取远点和半径构造方法。然而该实验不足之处也是不可任意输入圆心及半径的数据。 3、(选做)多态在工资系统中的应用。下面给出一个根据雇员类型利用多态性完成工资单计算的程序。定义一个类Employee作为超类,Employee的子类有Boss(每星期发给他固定工资,而不计工作时间)、PieceWorker(按其生产的产品数发放工资)、HourlyWorker(根据工作时间长短发放工资)。对所有雇员类型都使用earnings()方法完成其工资单的计算,但每个人挣的工资按他所属的雇员类计算,所有雇员类都是从超类Employee派出生的。所以在超类中声明earnings()方法,该方法没有实质性工作,而是在每个子类都提供恰当的earnings()方法的重写。为了计算雇员的工资,程序仅使用雇员对象的一个超类引导并调用earnings()方法。 //Employee超类的定义 class Employee{ private String firstName;private String lastName;public Employee(String first,String last){ firstName=first;lastName=last;} public String getEmployeeName(){ return firstName;} public String getLastName(){ return lastName;} public String toStrings(){ return firstName+' '+lastName;} public double earnings(){ System.out.println(”Employ's salary is 0.0“);return 0.0;} } //定义Boss类,为Employee的子类 class Boss extends Employee{ private double weeklySalary;public Boss(String first,String last,double s){ super(first,last);setWeeklySalary(s);} public void setWeeklySalary(double s){ weeklySalary=(s>0?s:0);} public double earnings(){ return weeklySalary;} public String toStrings(){ return ”Boss: “+super.toStrings();} } //定义PieceWorker类,为Employee的子类 class PieceWorker extends Employee{ private double wagePiece;private int quantity;public PieceWorker(String first,String last,double w,int q){ super(first,last);setWage(w);setQuantity(q);} public void setWage(double w){ wagePiece=(w>0?w:0);} public void setQuantity(int q){ quantity=(q>0?q:0);} public double earnings(){ return quantity*wagePiece;} public String toStrings(){ return ”PieceWoeker: “+super.toStrings();} } //定义HourlyWorker类,为Employee的子类 class HourlyWorker extends Employee{ private double wage;private double hours;public HourlyWorker(String first,String last ,double w,double h){ super(first,last);setWage(w);setHours(h);} public void setWage(double w){ wage=(w>0?w:0);} public void setHours(double h){ hours=(h>=0&&h<168?h:0);} public double earnings(){ return wage*hours;} public String toStrings(){ return ”HourlyWorker: “+super.toStrings();} } Public class TestEmployee{ public static void main(String args[ ]){ //使用超类声明ref Employee ref;String out=”“;//分别定义各子类 Boss b=new Boss(”Hohn“,”Smith“,800.00);PieceWorker p=new PieceWorker(”Bob“,”Lewis“,2.5,200);HourlyWorker h=new HourlyWorker(”Karen“,”price“,13.75,40);//使用子类分别实例化 ref=b;out+=ref.toStrings()+” earned $“+ref.earnings()+”n“+b.toStrings()+ ” earned $“+b.earnings()+”n“;System.out.print(out);ref=p;out+=ref.toStrings()+” earned $“+ref.earnings()+”n“+p.toStrings()+ ” earned $“+p.earnings()+”n“;System.out.print(out);ref=h;out+=ref.toStrings()+” earned $“+ref.earnings()+”n“+h.toStrings()+ ” earned $“+h.earnings()+”n“;System.out.print(out);} } 分析:设计思路主要是根据工种的不同而创建不同的结算工资类去继承员工类,这样是问题变得更加简单而且结构性强,不同的类有不同的工资算法,这样就不会造成混淆,也利于添加其他的结算工资类和维护。 六、注意事项 子构造方法的使用。 七、预习与思考题 1、如何继承一个类? 答:使用extends关键字即可继承一个类。 2、为什么说构造函数是一种特殊的方法?特殊在哪里?构造函数什么时候执行?被谁调用? 答:因为构造函数没有函数返回值也不能被定义为void;构造函数名与类名相同;一旦定义好一个构造函数,创建对象时就会自动调用它;被系统调用。 3、同名的不同方法共存的情况称为什么?如何区分这些同名方法? 答:重载。根据参数的个数或者参数的类型的不同可以区分同名方法。 实验四:Java类和对象的高级特征 一、实验目的与要求 1、掌握接口的编写及使用。 2、理解抽象类与最终类。 3、掌握包的编写以及如何使用包中的类。 二、实验类型 设计型 三、实验原理及说明 接口借助于类来实现,Java语言利用接口来实现多态性;Java包的机制。 四、实验仪器 安装JDK及Java IDE的计算机若干台 五、实验内容和步骤 1、接口的编写 ⑴ 编写一个接口myInterface。interface myInterface{ int i=4;int k=5;void myFunc1();int myFunc2(int x);} ⑵ 编写一个用于实现接口myInterface的类UseInterface。class UseInterface implements Interfaceclass{ int j;public void myFunc1(){ //在使用接口的类中一定要实现接口中的所有抽象方法 System.out.println(“myFunc1=”+1);} public int myFunc2(int i){ System.out.println(“func2=”+1);return i;} public static void main(String srgs[]){ UseInterface x = new UseInterface();x.myFunc1();x.myFunc2(k);} } 心得::主要涉及到创建一个接口和继承接口所有抽象方法的知识内容,让我对接口的概念以及用法有了进一步了解。 2、抽象类和最终类的使用 ⑴ 定义一个抽象类Shape用于描述图形,具有“名称”(name)属性以及计算其面积和周长的两个抽象方法GetArea()和GetLength()。定义一个最终类Circle继承自类Shape,增加了一个描述半径的属性radius及带参的构造函数用于该类对象的初始化操作,同时实现了Shape类中的两个抽象方法来计算圆的面积和周长。定义一个最终类Rectangle继承自类Shape,增加了两个属性length和width用于描述矩形的长和宽及带参的构造函数用于完成对该类对象的初始化,同时实现了Shape类中的两个抽象方法来计算矩形的面积和周长。package lei; public abstract class Shape { String name;void GetArea(){ } void GetLength(){ } } class Circle extends Shape{ double radius;Circle(double r){ radius=r;} double GetArea(double radius){ double s; s=3.14*radius*radius; return s; } double GetLength(double radius){ double l; l=3.14*2*radius; return l;} void Getanl(){ System.out.println(”圆的面积=“+GetArea(radius)); System.out.println(”圆的周长=“+GetLength(radius));} } class Rectangle extends Shape{ double width,length;Rectangle(double w,double l){ width=w; length=l;} double GetArea(double width,double length){ double s; s=width*length; return s; } double GetLength(double width,double length){ double l; l=2*(width+length); return l;} void GetAnl(){ System.out.println(”矩形的面积=“+GetArea(width,length)); System.out.println(”矩形的周长=“+GetLength(width,length));} public static void main(String args[]){ Rectangle r=new Rectangle(3.0,4.0); Circle c=new Circle(1.0); c.Getanl(); r.GetAnl();} } 分析:写了一个主抽象类和几个抽象方法,并写了一个圆类、一个矩形类分别去继承抽象类,并重新定义了其中的方法。这两个类中都用到了构造方法,并对抽象中getarea()、getlength()方法重新定义。 ⑵(选做)重写上面的程序,要求将Circle类和Rectangle类放到不同的包中,用包的技术组织程序的设计。同时要求程序能从键盘上接受数据以便求解不同的几何图形的周长面积。 package circle; import java.util.Scanner; public abstract class Circleclass { String name;void GetArea(){ } void GetLength(){ } } class Circle extends Circleclass{ double radius;Circle(double r){ radius=r;} double GetArea(double radius){ double s; s=3.14*radius*radius; return s; } double GetLength(double radius){ double l; l=3.14*2*radius; return l;} void Getanl(){ System.out.println(”圆的面积=“+GetArea(radius)); System.out.println(”圆的周长=“+GetLength(radius));} public static void main(String args[]){ Scanner radius=new Scanner(System.in); } } System.out.println(”请输入圆的半径“);int r=radius.nextInt();Circle c=new Circle(r);c.Getanl(); package rectangle; import java.util.Scanner; public abstract class Rectangleclass { String name;void GetArea(){ } void GetLength(){ } } class Rectangle extends Rectangleclass{ double width,length;Rectangle(double w,double l){ width=w; length=l;} double GetArea(double width,double length){ double s; s=width*length; return s; } double GetLength(double width,double length){ double l; l=2*(width+length); return l;} void GetAnl(){ System.out.println(”矩形的面积=“+GetArea(width,length)); System.out.println(”矩形的周长=“+GetLength(width,length));} public static void main(String args[]){ Scanner l=new Scanner(System.in); System.out.println(”请输入矩形的长和宽“); int c=l.nextInt(); int k=l.nextInt(); Rectangle r=new Rectangle(c,k); r.GetAnl();} } 六、注意事项 一个类用于实现某个接口的话则必须实现该接口中的所有方法。 七、预习与思考题 1、内部类inner class和外部类的区别? 答:内部类可以使用包涵类里面的成员变量,和包含类的成员方法是并列的。其他的外部类不能用内部类创建对象,只有在包涵类里面创建内部类对象。 2、抽象类和接口的区别? 答:抽象类里面可以有非抽象方法,抽象类不能被实例化,但是可以被继承,继承抽象类必须要实现所有的抽象方法,抽象方法不能有方法体。 而接口里只能有抽象方法,没有一个有程序体。接口只可以定义static final成员变量。接口变量可以引用具体实现类的实例。接口只能被实现(继承),一个具体类实现接口,必须使用全部的 抽象方法。接口之间可以继承。一个具体类可以实现多个接口,实现多继承现象。 实验五:图形用户界面的设计 一、实验目的与要求 掌握GUI编程中的主要概念:AWT,Swing,窗口、面板,容器布局,布局管理器。掌握GUI编程。掌握事件编程机制。 二、实验类型 设计型 三、实验原理及说明 图形用户界面是应用程序与用户交流的图形接口,由各种不同的组件按照一定的布局模式排列组成的,如菜单、按钮、标签等,与这些组件配合工作的还有一些相关的事件。 四、实验仪器 安装JDK及Java IDE的计算机若干台 五、实验内容和步骤 1、编程包含一个标签和一个按钮,单击按钮时,标签的内容在”你好“和”再见“之间切换。 package change;import java.awt.*;import java.awt.event.*;import java.applet.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JFrame;public class changetext { public static void main(String args[]){ ApplicationFrame AF = new ApplicationFrame(); } } class ApplicationFrame extends JFrame implements ActionListener { Label prompt;Button btn;ApplicationFrame(){ super(”我的窗口“); prompt = new Label(”你好“); btn = new Button(”显示“); setLayout(new FlowLayout()); add(prompt); add(btn); btn.addActionListener(this); setVisible(true); setSize(500, 600); setLocation(300, 400); } public void actionPerformed(ActionEvent e){ if(e.getActionCommand()== ”显示“){ if(prompt.getText().equals(”你好“)) prompt.setText(”再见“); else if(prompt.getText().equals(”再见“)) prompt.setText(”你好“); } } } 分析:主要考察的是页面布局和事件处理方面的知识,通过点击按钮产生事件改变标签中内容,给按钮加个事件监听,再写一个事件处理方法即可。 2、编程包含一个单选按钮组和一个普通按钮,单选按钮组中包含三个单选,文本说明分别为“普通”、“黑体”和“斜体”。选择文本标签为“普通”的单选按钮时,普通按钮中的文字为普通字体,选择文本标签为“黑体”的单选按钮时,普通按钮中的文字的字体为黑体,选择文本标签为“斜体”的单选按钮时,普通按钮中的文字的字体为斜体。import java.awt.*;import javax.swing.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;public class click implements ActionListener{ JRadioButton b1,b2,b3;JButton b4;click(){ JFrame frame=new JFrame(); JPanel panel=new JPanel(); ButtonGroup group=new ButtonGroup(); frame.setLayout(new FlowLayout());frame.getContentPane().add(panel);b1=new JRadioButton(”普通“);b2=new JRadioButton(”黑体“);b3=new JRadioButton(”斜体“);b4=new JButton(”普通按钮“); panel.add(b1); panel.add(b2); panel.add(b3); panel.add(b4); group.add(b1); group.add(b2); group.add(b3); b1.addActionListener(this); b2.addActionListener(this); b3.addActionListener(this); frame.pack(); frame.setVisible(true);} public void actionPerformed(ActionEvent e){ if(e.getActionCommand()==”普通“){ b4.setFont(new Font(”普通“,Font.PLAIN,14)); } if(e.getActionCommand()==”黑体“){ b4.setFont(new Font(”黑体“,Font.BOLD,14)); } if(e.getActionCommand()==”斜体“){ b4.setFont(new Font(”斜体“,Font.ITALIC,14)); } } public static void main(String[] args){ click c=new click();} } 分析:主要考察的是单选按钮组和普通按钮知识,通过选择不同的单选按钮,是普通按钮中内容发生改变,其中还涉及到设置字体字型、大小的知识。 3、(选做)编程确定当前鼠标的位置坐标。import java.awt.Point;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import javax.swing.JFrame;/** */ public class location extends JFrame implements MouseListener{ public location(){ this.setSize(500, 400); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.addMouseListener(this); this.setVisible(true); } public void mouseClicked(MouseEvent e){ //点击时产生事件 Point p = e.getPoint();//获得坐标 this.setTitle(”当前坐标:“ + p.x + ”,“ + p.y);} public void mousePressed(MouseEvent e){ } public void mouseReleased(MouseEvent e){ } public void mouseEntered(MouseEvent e){ } public void mouseExited(MouseEvent e){ } public static void main(String[] args){ location loc=new location();} } 分析:用到mouselistener、mouseclicked,通过点击鼠标左键即可获得鼠标所在位置的坐标。 4、(选做)编程使用BorderLayout布局方式放置5个按钮。import javax.swing.*;import java.awt.event.*;import java.awt.*; public class gettext extends JFrame { public static final int DEFAULT_WIDTH = 300;public static final int DEFAULT_HEIGHT = 300; public gettext(){ setTitle(”BORDER布局“);setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);JButton e= new JButton(”东“);JButton s= new JButton(”南“);JButton w= new JButton(”西“);JButton n= new JButton(”北“);JButton m= new JButton(”中“);getContentPane().add(n, BorderLayout.NORTH);getContentPane().add(m, BorderLayout.CENTER);getContentPane().add(s, BorderLayout.SOUTH);getContentPane().add(e, BorderLayout.EAST);getContentPane().add(w, BorderLayout.WEST);pack();setVisible(true);} public static void main(String[] args){ gettext a=new gettext(); } } 分析:运用到borderlayout布局方式对5个按钮进行东西南北中方向的布局,总体来看还是比较简单的。 六、注意事项 通过接口来完成事件处理时,应实现接口中的所有方法。 七、预习与思考题 1、Java的事件处理机制是怎样? 答:三个概念:事件源、事件和监听器。当事件源产生事件时,通过调用事件监听器相应的事件处理方法。 事件处理机制: 1、事件处理器。 2、事件监听器接口与事件监听器类。事件监听器实现方式分为自身类作为事件监听器、外部类作为事件监听器、匿名类作为事件监听器和内部类作为事件监听器4种。 3、注册事件监听器。 一个组件可以注册一个或多个监听器对象,事件对象只向已注册的监听器 对象报告事件发生 2、若一个数据只有两种取值可能,采用哪种组件表示比较合适?如果有二种到三种取值可能,采用哪种合适?如果取值的可能大于5个,采用哪种组件合适? 答:如果是两到三种取值且相互排斥,采用单选按钮比较合适,否则采用复选按钮。如果是5种以上的取值且只能选一,则用choice下拉列表,否则用list下拉列表。 实验六:Java Applet的编写 一、实验目的与要求 1、掌握Java Applet程序结构和开发过程。 2、了解Applet运行机制。 3、学会编写Applet对应的HTML文件,掌握从HTML文件向Applet传递参数的方法。 4、了解Applet与浏览器的通信。 5、掌握Applet图形界面设计。 二、实验类型 设计型 三、实验原理及说明 学习编辑、编译、运行Applet程序的方法。在Applet程序中没有实现main()方法,这是Applet与应用程序Application的区别之一。由于Applet中没有main()方法作为Java解释器的入口,所以必须编写HTML文件,把该Applet嵌入其中,然后用appletviewer来运行,或在支持Java的浏览器上运行,如IE。通过程序的运行掌握Applet的生命周期。 四、实验仪器 安装JDK及Java IDE的计算机若干台 五、实验内容和步骤 1、Applet程序的生命周期。 import java.awt.*;import java.applet.*;public class AppLife extends Applet{ static int a,b,c,d;int x1=150,y1=50,x2=300,y2=50;public void paint(Graphics g){ g.drawLine(x1,y1,x1,y2);//x1->x2 g.drawLine(x1,y1,x1,y1+a);g.drawString(”init“,x1,y1);g.drawLine(x1+50,y1,x1+50,y1+b);g.drawString(”start“,x1+50,y1);g.drawLine(x1+100,y1,x1+100,y1+c);g.drawString(”stop“,x1+100,y1);g.drawLine(x1+150,y1,x1+150,y1+d);g.drawString(”destory“,x2,y2);} public void init(){ a+=50;repaint();} public void start(){ b+=50;repaint();} public void stop(){ } } 分析: Applet的生命周期中有四个状态:初始态、运行态、停止态和消亡态。当程序执行完init()方法以后,Applet程序就进入了初始态,然后马上执行start()方法。而没有执行stop(),destory().2、(选做)编写一个小应用程序,由HTML文件向其传递参数。要求把HTML文件中设置的两组数据(“Susan”,85)和(“Jeff”,96)传递给Applet并在浏览器中显示。主类class文件: package te;import java.applet.*;import java.awt.*;public class gettext extends Applet { int s;int x;public void init(){ s=Integer.parseInt(getParameter(”Susan“)); x=Integer.parseInt(getParameter(”Jeff“)); System.out.println(”susan:“+s); System.out.println(”jeff:“+x); } } Html程序文件: 心得:由于浏览器版本的问题和对该类知识不熟,实验过程一直出现问题,经过不断寻找资料,不断的调试对问题有了进一步的了解,也给我了学习新知识的机会。 六、注意事项 Applet的生命周期。 七、预习与思考题 1、构造方法、start()方法和init()方法谁先被执行? 答:构造方法先被执行,然后构造方法调用init()方法,最后系统会执行start()方法。 2、Applet如何与网页中其他对象通信? 答:使用getApplet和getApplets这两个方法,Applet能够寻找到其他的Applet并调用它们的方法,就可以实现Applet与网页对象通信。 《Java简易聊天室》 实验目的:实现简单的客服端与服务端通讯,进一步巩固,加深对Java语言基础知识的了解,将理论与实际相结合。 实验要求:能相互之间发送消息,并进行简单的异常处理。 聊天室截图与说明: 客户端 服务端 将客服端与服务端程序同时运行,此时会显示出客户端与服务端界面。在客户端界面上点击“连接”按钮,即可使客户端与服务端进程建立连接。在文本框中输入将要发送的消息,点击“发送”按钮,即可将消息发送到对应端口。当服务端发送消息时,服务端便相当于客户端。当需要终止连接时,关闭相应窗口即可。 设计概要:类/接口/函数说明 1.public class ClientUI extends Jframe{} public class ServerUI extends Jframe{} ClientUI与ServerUi继承Frame类构建客户端与服务器端窗口。 2.class ChatClient extends Thread{} class SvrCom extends Thread{} 通讯类ChatClient/SvrCom负责守候数据到来 3.public void run() 用于监听客户端/服务器端发送来的信息,运行连接 4.public void sendMsg(String msg){// 用于发送信息 try { out.println(“【客户端】” + msg); } catch(Exception e){ System.out.println(e); } } public void sendMsg(String msg){// 用于发送信息 try { out.println(“【服务器】” + msg);// 把信息写入输出流 } catch(Exception e){ System.out.println(e); } } 5.try { msg = in.readLine();// 从in对象上读数据信息 } catch(SocketException ex){ System.out.println(ex); break; } catch(Exception ex){ System.out.println(ex); } if(msg!= null && msg.trim()!= “"){ System.out.println(”>>“ + msg); ui.mainArea.append(msg + ”n“); } 简单的异常处理 6.public ChatClient(String ip, int port, ClientUI ui){// 初始化ChatClient类 this.ui = ui; try { sc = new Socket(ip, port);// 创建sc, 用服务器ip和端口作参数 System.out.println(”已顺利联接到服务器。“); out = new PrintWriter(sc.getOutputStream(), true); in = new BufferedReader(new InputStreamReader(sc.getInputStream())); } catch(Exception e){ System.out.println(e); } start(); public SvrCom(ServerUI ui){ // 初始化SvrCom类 this.ui = ui; ui.setServer(this); try { soc = new ServerSocket(6666);// 开设服务器端口6666 System.out.println(”启动服务器成功,等待端口号:6666“); client = soc.accept();// 当客户机请求连接时,创建一条链接 System.out.println(”连接成功!来自“ + client.toString()); in = new BufferedReader(new InputStreamReader(client .getInputStream())); out = new PrintWriter(client.getOutputStream(), true); } catch(Exception ex){ System.out.println(ex); } start(); 自我评价或总结:经过本次实验,进一步了解了客户端与服务器之间的通信机制,对以后的编程实践垫定了基础。同时还巩固了GUI图形界面知识,更重要的是它使我对网络编程有了一定的了解,也学到了不少知识。 附: 源代码:import java.io.*;import java.net.*;import javax.swing.*;import java.awt.event.*;import java.awt.*; public class ClientUI extends JFrame { JTextArea mainArea; JTextArea sendArea; ChatClient client;JTextField ipArea;JButton btnLink;public void setClient(ChatClient client){ this.client = client;} public ClientUI(){ super(”客户端“);Container contain = getContentPane();contain.setLayout(new BorderLayout());mainArea = new JTextArea();JScrollPane mainAreaP = new JScrollPane(mainArea);JPanel panel = new JPanel();panel.setLayout(new BorderLayout());sendArea = new JTextArea(3, 8);JButton sendBtn = new JButton(”发送“);sendBtn.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent ae){ client.sendMsg(sendArea.getText()); mainArea.append(”【客户端】“ + sendArea.getText()+ ”n“); sendArea.setText(”“); } });JPanel ipPanel = new JPanel();ipPanel.setLayout(new FlowLayout(FlowLayout.LEFT, 10, 10));ipPanel.add(new JLabel(”服务器:“));ipArea = new JTextField(12);ipArea.setText(”127.0.0.1“);ipPanel.add(ipArea);btnLink = new JButton(”连接“);ipPanel.add(btnLink);btnLink.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent ae){ client = new ChatClient(ipArea.getText(), 6666, ClientUI.this); ClientUI.this.setClient(client); } }); panel.add(sendBtn, BorderLayout.EAST); panel.add(sendArea, BorderLayout.CENTER); contain.add(ipPanel, BorderLayout.NORTH); contain.add(mainAreaP, BorderLayout.CENTER); contain.add(panel, BorderLayout.SOUTH); setSize(500, 300); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);} public static void main(String[] args){ ClientUI ui = new ClientUI();} } class ChatClient extends Thread { Socket sc;BufferedReader in;PrintWriter out;ClientUI ui; public ChatClient(String ip, int port, ClientUI ui){ this.ui = ui; try { sc = new Socket(ip, port); System.out.println(”已顺利联接到服务器。“); out = new PrintWriter(sc.getOutputStream(), true); in = new BufferedReader(new InputStreamReader(sc.getInputStream())); } catch(Exception e){ System.out.println(e); } start();} public void run(){ String msg = ”“; while(true){ try { msg = in.readLine(); } catch(SocketException ex){ System.out.println(ex); break; } catch(Exception ex){ System.out.println(ex); } if(msg!= null && msg.trim()!= ”“){ System.out.println(”>>“ + msg); ui.mainArea.append(msg + ”n“); } } } public void sendMsg(String msg){ try { out.println(”【客户端】“ + msg); } catch(Exception e){ System.out.println(e); } } } import java.io.*;import java.net.*;import javax.swing.*;import java.awt.event.*;import java.awt.*;/** * 服务端界面ServerUI */ public class ServerUI extends JFrame { JTextArea mainArea; JTextArea sendArea; JTextField indexArea; SvrCom server; public void setServer(SvrCom server){ this.server = server;} public ServerUI(){ super(”服务器端“); Container contain = getContentPane(); contain.setLayout(new BorderLayout()); mainArea = new JTextArea(); JScrollPane mainAreaP = new JScrollPane(mainArea);JPanel panel = new JPanel();panel.setLayout(new BorderLayout());sendArea = new JTextArea(3, 8);JButton sendBtn = new JButton(”发送“);sendBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae){ server.sendMsg(sendArea.getText()); mainArea.append(”【服务器】sendArea.getText()+ “n”); sendArea.setText(“"); } });JPanel tmpPanel = new JPanel();indexArea = new JTextField(2);indexArea.setText(”0“);tmpPanel.add(sendBtn);tmpPanel.add(indexArea);panel.add(tmpPanel, BorderLayout.EAST);panel.add(sendArea, BorderLayout.CENTER);contain.add(mainAreaP, BorderLayout.CENTER);contain.add(panel, BorderLayout.SOUTH);setSize(500, 300);setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);} public static void main(String[] args){ ServerUI ui = new ServerUI();SvrCom server = new SvrCom(ui);} } class SvrCom extends Thread { Socket client;ServerSocket soc;BufferedReader in;PrintWriter out;ServerUI ui;// ChatServer server;public SvrCom(ServerUI ui){ ” + this.ui = ui;ui.setServer(this);try { soc = new ServerSocket(6666); } System.out.println(“启动服务器成功,等待端口号:6666”); client = soc.accept(); System.out.println(“连接成功!来自” + client.toString()); in = new BufferedReader(new InputStreamReader(client .getInputStream())); out = new PrintWriter(client.getOutputStream(), true);} catch(Exception ex){ System.out.println(ex);} start();} public void run(){ String msg = “";while(true){ try { msg = in.readLine(); } catch(SocketException ex){ System.out.println(ex); break; } catch(Exception ex){ System.out.println(ex); } if(msg!= null && msg.trim()!= ”“){ System.out.println(”>>“ + msg); ui.mainArea.append(msg + ”n“); } } } public void sendMsg(String msg){ try { out.println(”【服务器】" + msg);} catch(Exception e){ System.out.println(e);} } 学 生 实 验 报 告 册 (理工类) 课程名称:面向对象程序设计 专业班级:16计算机科学与技术(专转本) 学生学号: 1613203022 学生姓名: 张义丹 所属院部: 计算机工程 指导教师: 刘 晶 16 ——20 17 学年 第 2 学期 金陵科技学院教务处制 实验报告书写要求 实验报告上交电子稿,标题采用四号黑体,正文采用小四号宋体,单倍行距。 实验报告书写说明 实验报告中实验目的和要求、实验仪器和设备、实验内容与过程、实验结果与分析这四项内容为必需项。教师可根据学科特点和实验具体要求增加项目。 填写注意事项 (1)细致观察,及时、准确、如实记录。(2)准确说明,层次清晰。 (3)尽量采用专用术语来说明事物。 (4)外文、符号、公式要准确,应使用统一规定的名词和符号。(5)应独立完成实验报告的书写,严禁抄袭、复印,一经发现,以零分论处。 实验报告批改说明 实验报告的批改要及时、认真、仔细,一律用红色笔批改。实验报告的批改成绩采用五级记分制或百分制,按《金陵科技学院课堂教学实施细则》中作业批阅成绩评定要求执行。 实验项目名称:Java编程基础 实验学时: 6 同组学生姓名: ———— 实验地点: 工科楼A101 实验日期: 17.3.21~17.4.4 实验成绩: 批改教师: 刘晶 批改时间: 实验1 Java编程基础 一、实验目的和要求 (1)熟练掌握JDK1.6及Eclipse4.2编写调试Java应用程序及Java小程序的方法;(2)熟练掌握Java应用程序的结构; (3)了解Java语言的特点,基本语句、运算符及表达式的使用方法;(4)熟练掌握常见数据类型的使用; (5)熟练掌握if-else、switch、while、do-while、for、continue、break、return语句的使用方法; (6)熟练掌握数组和字符串的使用; (7)调试程序要记录调试过程中出现的问题及解决办法; (8)编写程序要规范、正确,上机调试过程和结果要有记录,不断积累编程及调试经验; (9)做完实验后给出本实验的实验报告。 二、实验仪器和设备 奔腾以上计算机,Windows 操作系统,装有JDK1.6和Eclipse4.2软件。 三、实验过程 (1)分别使用JDK命令行和Eclipse编译运行Java应用程序;适当添加注释信息,通过javadoc生成注释文档;为主方法传递参数“Hello world”字符串,并输出,记录操作过程。 public class Hello { public static void main(String args[]){ System.out.println(“Hello!”);} }(2)分别使用JDK命令行和Eclipse编译Java Applet,并建立HTML文档运行该Applet。压缩生成“.jar”文件。记录操作过程。import java.awt.*;import java.applet.Applet;public class HelloApplet extends Applet { public void paint(Graphics g){ g.setColor(Color.red);g.drawString(“Hello!”,20,20);} } (3)根据变量score中存放的考试分数,输出对应的等级。要求从键盘输入学生成绩,60分以下为D等;60~69为C等;70~89为B等;90~100为A等。(4)编写一个Java Application程序,输出区间[200,300]上的所有素数,将其用数组prime[]保存,并以每10个一行的形式显示运行结果。(5)输出下列数字形式,要求用二维数组完成。①n=4 0 0 0 0 0 1 1 1 0 1 2 2 0 1 2 3 ② n=4 1 1 2 1 1 2 3 2 1 1 2 3 4 3 2 1(6)求二维数组的鞍点,即该位置上的元素在该行上最大,在列上最小。也可能无鞍点。(7)分析下列程序的输出结果,掌握equals()方法和“= =”的区别。class StringTest2{ public static void main(String args[]){ String s1 = “This is the second string.”; String s2 = “This is the second string.”; String s3 = new String(“This is the second string.”); String s4 = new String(s1); String s5 = s1; boolean result121 = s1.equals(s2); boolean result122 = s1 == s2; boolean result131 = s1.equals(s3); boolean result132 = s1 == s3; boolean result141 = s1.equals(s4); boolean result142 = s1 == s4; boolean result151 = s1.equals(s5); boolean result152 = s1 == s5; System.out.println(“s1 equals s2= ” +result121); System.out.println(“s1 == s2= ” +result122); System.out.println(“s1 equals s3= ” +result131); System.out.println(“s1 == s3= ” +result132); System.out.println(“s1 equals s4= ” +result141); System.out.println(“s1 == s4= ” +result142); System.out.println(“s1 equals s5= ” +result151); System.out.println(“s1 == s5= ” +result152);} }(8)判断回文字符串 回文是一种“从前向后读”和“从后向前读”都相同的字符串。如“rotor”是一个回文字符串。 程序中使用了两种算法来判断回文字符串: 算法一:分别从前向后和从后向前依次获得原串str的一个字符ch1、ch2,比较ch1和ch2,如果不相等,则str肯定不是回文串,yes=false,立即退出循环:否则继续比较,直到字符全部比较完,yes的值仍为true,才能肯定str是回文串。 算法二:将原串str反转成temp串,再比较两串,如果相等则是回文字符串。(9)使用String类的compareTo(String s)方法,对以下字符串从小到大排序:“melon”, “apple”, “pear”, “banana”,显示输出排序结果。 要求: (1)编译调试程序之前应配置好环境变量; (2)要分别掌握用JDK命令行和Eclipse集成开发环境调试Java程序;(3)注意Java两大类程序:应用程序和小程序的区别。 程序清单: (建议程序中适当添加注释信息,增强可读性;较长程序可分栏书写,保证报告排版整洁美观。) (1)主方法传递参数“Hello world”字符串,并输出 public class Hello { public Hello(){ System.out.println(“HelloWorld!”);} public static void main(String args[]){ new Hello();} }(2)Eclipse编译Java Applet import java.awt.*;import java.applet.Applet;public class HelloApplet extends Applet { int height,width;public void init(){ this.height=100; this.width=300;} public void paint(Graphics g){ g.setColor(Color.red); g.drawString(“Hello!”, 20, 20);} }(3) package b;import java.util.Scanner;public class Test { public static void main(String args[]){ int score; //char grade; System.out.println(“请输入分数按回车”); Scanner reader=new Scanner(System.in); score=reader.nextInt(); if(score>=90&&score<=100){ System.out.println(“A”); } else if(score>=70&&score<=89){ System.out.println(“B”); } else if(score>=60&&score<=69){ System.out.println(“C”); } else if(score<60){ System.out.println(“D”); } else{ System.out.println(“数据错误”); } } }(4) public class Lim { public static void main(String[] args){ int[] prime = calculation(20, 200, 300); for(int i = 0;i < prime.length;i++){ if(prime[i]!= 0){ if(i % 10 == 0 && i!= 0) System.out.println(); System.out.print(prime[i] + “ ”);// 打印数据 } } } public static int[] calculation(int length, int start, int end){ int j; int step = 0; int[] prime = new int[length]; for(int i = start;i <= end;i++) { j = 2; while(i % j!= 0){ j++; } if(j == i) { prime[step] = i; step++; } } return prime; } }(5)① public class shuzu { public static void main(String args[]){ int i,j; int arr[][]=new int[4][]; for(i=0;i arr[i]=new int[arr.length];for(i=0;i<4;i++) for(j=3;j>=i;j--){ arr[i][j]=i; } for(j=0;j<4;j++){ for(i=3;i>=j;i--){ arr[i][j]=j; } } for(i=0;i<=3;i++){ for(j=0;j<=3;j++){ System.out.print(arr[i][j]); System.out.print(“ ”); } System.out.println(); } } } ②public class Shuzu { public static void main(String args[]){ int num[][]=new int[4][];for(int i=0;i num[i]=new int[2*i+1]; for(int m=0;m System.out.print(“ ”); } int k=i+1; for(int j=0;j if(j<=i) num[i][j]=j+1; else{ k--; num[i][j]=k; } System.out.print(num[i][j]+“ ”); } System.out.println();} } }(6)public class test { public static void main(String[] args){ // TODO Auto-generated method stub int[][] mat = {{11,12,13},{4,5,6},{7,8,9}}; for(int i=0;i { for(int j=0;j System.out.print(mat[i][j]+“ ”); System.out.println(); } boolean find = false;//找到鞍点标记 int row=0;//第1行下标 int max=0;//记录当前行最大值的列下标 while(!find && row { max=0;//初始设每行第1列值最大 for(int j=1;j if(mat[row][j]>mat[row][max])//mat[row][max]为该行最大值 max = j; boolean yes = true;//再判断mat[row][max]是否在列上最小 int j=0; while(yes && j { if(mat[j][max] yes=false; j++; } if(yes) find = true; else row++; } if(find) System.out.println(“The dort: ”+mat[row][max]); else System.out.println(“The dort: null”);} }(8)import java.util.Scanner;public class HuiWenTest { public static void main(String[] args){ // TODO Auto-generated method stub System.out.println(“请输入一个字符串”);@SuppressWarnings(“resource”) Scanner input = new Scanner(System.in);String str = input.next();StringBuilder sb=new StringBuilder(str);sb.reverse();//将Sr倒置的方法 String newStr=new String(sb);if(str.equals(newStr)){ System.out.println(str+“是回文字符串”);}else{ System.out.println(str+“不是回文字符串”);} } }(9)import java.util.*;public class SortString { public static void main(String[] args){ // TODO Auto-generated method stub String [ ] a={“melon”,“apple”,“pear”,“banana”}; String [ ] b=Arrays.copyOf(a,a.length);System.out.println(“使用用户编写的SortString类,按字典序排列数组a:”);SortString.sort(a);System.out.println(“排序结果是:”);for(String s:a){ System.out.print(“ ”+s);} System.out.println(“");System.out.println(”使用类库中的Arrays类,按字典序排列数组b:“);Arrays.sort(b);System.out.println(”排序结果是:“);for(String s:b){ System.out.print(” “+s);} } 四、实验结果与分析(程序运行结果及其分析) (1) (2) (3) (4) (5) (6) (7) (8) (9) 五、实验体会(遇到问题及解决办法,编程后的心得体会) 在这次实验中,我知道了eclipse和jdk运行程序的区别,jdk比较麻烦一些,需要配置变量。在实验中,配置jdk的环境变量要注意它的path和 classpath,如果classpath本身就有,可以在后面加分号,这样不影响其它的classpath的使用。学会了如何生成注释文档,主函数传递参数的方法,还有压缩文件,实验中还对数组的创建和使用进行了练习,还有一些类的应用。 实验项目名称: 面向对象编程 实验学时: 8 同组学生姓名: ———— 实验地点: 工科楼A101 实验日期: 17.4.11~17.5.2 实验成绩: 批改教师: 刘晶 批改时间: 实验2 面向对象编程 一、实验目的和要求 (1)熟练掌握Java语言类定义的基本语法;(2)熟练掌握类成员的访问控制,对象建立的方法;(3)熟练掌握类构造方法、成员方法的定义和重载;(4)熟练掌握类继承、多态和抽象性;(5)熟练掌握接口的定义和实现方法;(6)掌握基本的异常处理方法; (7)调试程序要记录调试过程中出现的问题及解决办法; (8)编写程序要规范、正确,上机调试过程和结果要有记录,不断积累编程及调试经验; (9)做完实验后给出本实验的实验报告。 二、实验仪器和设备 奔腾以上计算机,Windows 操作系统,装有JDK1.6和Eclipse4.2软件。 三、实验过程 (1)定义一个Man类,保存在Man.java文件中,类中包含说话方法如下: public class Man { public void say() { System.out.println(“我是中国人!”); } } 为此类打包为cn.edu.jit.chinese;再在Man.java文件所在路径下,创建一个China.java文件,其中定义China类如下: public class China { public static void main(String[] args) { Man lihua = new Man(); lihua.say(); } } 在China类中引用Man类,输出显示“我是中国人!”。试着去掉Man类的public修饰,看看会发生什么情况? (2)设计复数类,成员变量包括实部和虚部,成员方法包括实现复数加法、减法、字符串描述、比较是否相等等操作。 (3)包的建立与使用:设计计算器类Calculator,计算加、减、乘、除和立方体体积,并且打包为mypackage。观察源文件目录下是否生成了mypackage文件夹,在该文件夹中是否有Calculate.class文件。编辑PackageDemo.java,保存在Calculator.java同一目录下,引用计算器类的各方法显示计算结果。 (4)试编码实现简单的银行业务:处理简单帐户存取款、查询。编写银行帐户类BankAccount,包含数据成员:余额(balance)、利率(interest);操作方法:查询余额、存款、取款、查询利率、设置利率。再编写主类UseAccount,包含main()方法,创建BankAccount类的对象,并完成相应操作。 (5)假定根据学生的3门学位课程的分数决定其是否可以拿到学位,对于本科生,如果3门课程的平均分数超过60分即表示通过,而对于研究生,则需要平均超过80分才能够通过。根据上述要求,请完成以下Java类的设计: 1)设计一个基类Student描述学生的共同特征。 2)设计一个描述本科生的类Undergraduate,该类继承并扩展Student类。3)设计一个描述研究生的类Graduate,该类继承并扩展Student类。 4)设计一个测试类StudentDemo,分别创建本科生和研究生这两个类的对象,并输出相关信息。 (6)设计三角形类,继承图形抽象类,计算三角形面积和周长。 (7)试编码实现多态在工资系统中的应用:给出一个根据雇员类型利用abstract方法和多态性完成工资单计算的程序。Employee是抽象类,Employee的子类有Boss(每星期发给他固定工资,而不计工作时间)、CommissionWorker(除基本工资外还根据销售额发放浮动工资)、PieceWorker(按其生产的产品数发放工资)、HourlyWorker(根据工作时间长短发放工资)。该例的Employee的每个子类都声明为final,因为不需要再继承它们生成子类。在主测试类Test中测试各类雇员工资计算结果。 提示:对所有雇员类型都使用earnings()方法,但每个人挣的工资按他所属的雇员类计算,所有雇员类都是从超类Employee派生出的。在超类中声明earnings()为抽象方法,并且对于每个子类都提供恰当的earnings()的实现方法。为了计算雇员的工资,程序仅仅使用雇员对象的一个超类引用并调用earnings()方法。在一个实际的工资系统中,各种Employee对象的引用可以通过一个Employee引用数组来实现。程序依次使用数组的每个元素(Employee引用)调用每个对象的earnings()方法。Employee类定义如下: abstract class Employee { private String firstName;private String lastName;public Employee(String first,String last){ firstName=first;lastName=last;} public String getEmployeeName(){ return firstName;} public String getLastName(){ return lastName;} public String toString(){ return firstName+lastName;} public abstract String earnings();}(8)设计圆柱体类和圆椎体类,继承圆类Circle并实现体积接口Volume,计算表面积和体积。 (9)定义一个接口CanFly,描述会飞的方法public void fly();分别定义飞机类和鸟类,实现CanFly接口。定义一个测试类,测试飞机和鸟。测试类中定义一个makeFly(CanFly obj)方法,让会飞的事物飞起来(即调用相应类的fly()方法)。然后在main方法中创建飞机对象和鸟对象,并在main方法中调用makeFly(CanFly obj)方法,让飞机和鸟起飞。 (10)异常的捕获:计算两数相除并输出结果。使用三个catch子句,分别捕捉输入输出异常、除数为0的异常和参数输入有误异常。import java.io.*;class Ex1 { public static void main(String args[ ]){ try{ BufferedReader strin=new BufferedReader(new InputStreamReader(System.in));//建立输入流缓冲区 System.out.print(”请输入除数:“);String cl=strin.readLine();//键盘输入 int a=Integer.parseInt(cl);System.out.print(”请输入被除数:“);cl=strin.readLine();int b=Integer.parseInt(cl);int c=b/a;System.out.println(”商为:“+c);} //捕获与I/O有关的异常(空白处补全捕获语句) //捕获数值转化时的异常,如不能将字符转化成数值 //捕获除数为0的异常 } } 编译并运行,当产生输入输出异常时显示异常信息;当输入除数为0时,出现算术异常,提示除数为0,并要求重新输入;当输入的不是整数时,如将30输成了3o,出现数值格式异常,提示输入整数。 (11)编写程序包含自定义异常MyException,当100被13和4除时抛出该异常,其余除数显示商值。 要求: (1)注意选用适当的类成员修饰符(private、protected、public等),比较它们的使用情况; (2)养成良好的编程习惯,严格按照命名规则为包、类及类成员命名,将每个程序打包,包的命名方式如two.num1表示实验二的第一题; (3)学会使用Eclipse的各种调试方法; (4)学会查阅Java API文档,如查找异常类的使用方法。 程序清单: (建议程序中适当添加注释信息,增强可读性;较长程序可分栏书写,保证报告排版整洁美观。)(1)package cn.edu.jit.chinese;// 为Man类打包为cn.edu.jit.chinese public class Man { public void say(){ System.out.println(”我是中国人!“);} } package cn.edu.jit.chinese; import cn.edu.jit.chinese.*;//导入包 public class China { public static void main(String[] args){ Man lihua = new Man();//主方法先创建类然后调用类 lihua.say();} }(2)public class Complex { private double real,image;//定义私有的real,image public Complex(double real,double image) {this.real=real;//赋值 this.image=image;} public Complex(double real){this(real,0);} public Complex(){this(0,0);} public Complex(Complex c){this(c.real,c.image);} public double getReal(){return real;} public void setReal(double real){ this.real = real;} public double getImage(){ return image;} public void setImage(double image){ this.image = image;} public Complex add(Complex c1,Complex c2)//写方法 {Complex C=new Complex(c1.real+c2.real,c1.image+c2.image);return C;} public Complex add(Complex c1){Complex C=new Complex(this.real+c1.real,this.image+c1.image);return C;} public Complex jian(Complex c1,Complex c2){Complex C=new Complex(c1.real-c2.real,c1.image-c2.image);return C;} public Complex jian(Complex c1){Complex C=new Complex(this.real-c1.real,this.image-c1.image);return C;} public boolean bijiao(Complex c1,Complex c2){return(c1.real==c2.real&&c1.image==c2.image);} public boolean bijiao(Complex c1){return(c1.real==this.real&&c1.image==this.image);} public String toString(){return this.real+”+“+this.image+”i“;} } public class ComplexText { public static void main(String[] args){ Complex c1=new Complex(2,5);//创建类,调用类里面的方法 Complex c2=new Complex(5,2); Complex c3=new Complex(); System.out.println(c3.add(c1,c2)); System.out.println(c3.jian(c1,c2)); System.out.println(c3.bijiao(c1,c2));} }(3)public class Calculate { double i,j, t;public Calculate(int i,int j){this.i=i;this.j=j;} public Calculate(int i,int j,int t){this.i=i;this.j=j;this.t=t;} public double add(){return i+j;} public double jian(){return i-j;} public double cheng(){return i*j;} public double chu(){return i/j;} public double tiji(){return i*i*i+j*j*j+t*t*t;} } public class PackageDemo {//测试 public static void main(String[] args){ Calculate c1=new Calculate(8,4); Calculate c2=new Calculate(8,4,2); System.out.println(”相加=“+c1.add()); System.out.println(”相减=“+c1.jian()); System.out.println(”相乘=“+c1.cheng()); System.out.println(”相除 =“+c1.chu()); System.out.println(”立方体体积=“+c2.tiji());} }(4)public class BankAccount { double balance,interest,cunkuan;public BankAccount(double cunkuan,double balance)//写方法 {this.balance=balance; this.cunkuan=cunkuan;} public void set(double cunkuan) {if(cunkuan<10000)interest=0.1; else if(cunkuan<50000)interest=0.25; else if(cunkuan<100000)interest=0.035; else interest=0.5;} public double get() { return interest;} public void chaxun(double balance,double cunkuan) {System.out.println(”存款为:“+cunkuan); System.out.println(”余额为:“+balance);} public void qu(double qukuan) {System.out.println(”取款为:“+qukuan);System.out.println(”得到的利润率:“+(this.cunkuan-qukuan)*this.interest);} } public class UseAccount {//测试 public static void main(String[] args){ BankAccount c1=new BankAccount(40000,40000); c1.chaxun(40000,20000); c1.set(20000); System.out.println(”利率为“+c1.get()); c1.qu(10000);} }(5)public class Student { String name;int age;float average,chainese;float math,Enghish;public Student(String name,int age){this.name=name;this.age=age;System.out.println(name+”:“+age+”岁“+” “);} public void set(float chinese,float math,float Enghish){average=(chinese+math+Enghish)/3;} public float get(){return average;} } class Undergraduate extends Student// Student继承Undergraduate {public Undergraduate(String name,int age){ super(name,age);} public void hege(float average){ this.average=average; if(average>=60)System.out.println(”本科生成绩合格“);else System.out.println(”本科生成绩不合格“);}} class Graduate extends Student// Student继承Graduate {public Graduate(String name,int age){ super(name,age);//调用 } public void hege(float average){ this.average=average;if(average>=80)System.out.println(”研究生生成绩合格“);else System.out.println(”研究生成绩不合格“);} } public class StudentDemo {//测试 public static void main(String[] args){ Undergraduate c1=new Undergraduate(”小明 “,22); System.out.println(”本科生三门成绩分别为:“+”59,“+”85,“+”90“); c1.set(65,75,60); System.out.println(”本科生平均分=“+c1.get()); c1.hege(c1.get()); System.out.println(); Graduate c2=new Graduate(”小红 “,18); System.out.println(”研究生生三门成绩分别为“+”90,“+”84,“+”88“); c2.set(80,86,79); System.out.println(”研究生生平均分=“+c2.get()); c2.hege(c2.get());}(6)public abstract class ClosedFigure {//定义抽象类 String shape;public ClosedFigure(String newShape){this.shape=newShape;} public abstract double perimeter();//定义抽象类,里面不能写方法 public abstract double area();} public class Triangle extends ClosedFigure {// ClosedFigure继承Triangle double a,b,c;public Triangle(String newShape,double a,double b,double c){super(”newShape“);this.a=a;this.b=b; this.c=c;} public double perimeter(){return a+b+c;} public double area(){double s;s=(a+b+c)/2;return Math.sqrt(s*(s-a)*(s-b)*(s-c));} public String toString(){return(”三角形三边长:“+a+” “+b+” “+c+” “+”周长:“+perimeter()+”面积:“+area());} public class Test { public static void main(String[] args){ Triangle c1=new Triangle(”三角形“,3,4,5); c1.perimeter(); c1.area(); System.out.println(c1.toString());} } }(7)public abstract class Employee { private String firstName;private String lastName;public Employee(String first,String last) {firstName=first; lastName=last;} public String getEmployeeName() {return firstName;} public String getLastName() { return lastName;} public String toString() {return firstName+lastName;} public abstract String earnings();} public final class Boss extends Employee{ double salary;public Boss(String first, String last, double salary){ super(first, last); this.salary = salary;} public String earnings(){return(salary+”“);} } public final class CommissionWorker extends Employee { double salary; double sale;double price;public CommissionWorker(String first, String last, double salary, double sale,double price){ super(first, last); this.salary = salary; this.sale = sale; this.price = price;} public String earnings(){return(salary+sale*price+”“);} } public final class PieceWorker extends Employee{ double number; double price; public PieceWorker(String first, String last, double number,double price){ super(first, last); this.number = number; this.price=price; } public String earnings() {return(number*price+”“);} } public final class HourlyWorker extends Employee {double time;double money;public HourlyWorker(String first, String last, double time, double money){ super(first, last);this.time = time;this.money = money;} public String earnings(){ return(time*money+”“);} } public class Test { public static void main(String[] args){ Employee c1=new Boss(”张“,”三“,10000); System.out.println(”张三月工资:“+c1.earnings()); Employee c2=new CommissionWorker(”李“,”四“,4000,1500,2); System.out.println(”李四月工资:“+c2.earnings()); Employee c3=new PieceWorker(”王“,”五“,1000,3); System.out.println(”王五月工资:“+c3.earnings()); Employee c4=new HourlyWorker(”刘“,”三“,600,30); System.out.println(”刘三月工资:“+c4.earnings());} }(8)public class Circle { String shape;double r;double height;double pi;public Circle(String shape,double r,double height,double pi){this.shape=shape;this.height=height;this.r=r;this.pi=pi;} } public interface Volume { public abstract double area();public abstract double NewVolume();} public class Yuanzhu extends Circle implements Volume { public Yuanzhu(String shape, double r, double height, double pi){ super(shape, r, height, pi);} public double area(){ return pi*r*r;} public double NewVolume(){return area()*height;} } public class Yuanzhui extends Yuanzhu implements Volume { public Yuanzhui(String shape, double r, double height, double pi){ super(shape, r, height, pi); // TODO Auto-generated constructor stub } double s;public double area(){s=Math.sqrt(height*height+r*r);return pi*r*s+pi*r*r;} public double NewVolum(){return 1.0/3*pi*r*pi*r*height;} } public class Test { public static void main(String[] args){ Yuanzhu c1=new Yuanzhu(”圆柱“,4,6,3.14); Yuanzhui c2=new Yuanzhui(”圆锥“,2,3,3.14); System.out.println(”圆柱表面积:“+c1.area()); System.out.println(”圆柱体积:“+c1.NewVolume()); System.out.println(”圆锥表面积:“+c2.area()); System.out.println(”圆锥体积:“+c2.NewVolume());} }(9)public interface CanFly {//定义接口CanFly public void fly();} public class Plane implements CanFly{//使用接口 @Override public void fly(){ // TODO Auto-generated method stub System.out.println(”飞机借助螺旋桨飞上天空“);} } public class Bird implements CanFly{ @Override public void fly(){ // TODO Auto-generated method stub System.out.println(”小鸟 借助翅膀飞上天空“);} } public class Test { static void makeFly(CanFly obj){ obj.fly();} public static void main(String[] args){ // TODO Auto-generated method stub CanFly p =new Plane(); makeFly(p); CanFly b =new Bird(); makeFly(b);} }(10)import java.io.*;public class Ex1 { public static void main(String args[ ]){ try{ BufferedReader strin=new BufferedReader(new InputStreamReader(System.in));//建立输入流缓冲区 System.out.print(”请输入除数:“);String cl=strin.readLine();//键盘输入 int a=Integer.parseInt(cl);System.out.print(”请输入被除数:“);cl=strin.readLine();int b=Integer.parseInt(cl);int c=b/a;System.out.println(”商为:“+c);} //捕获与I/O有关的异常(空白处补全捕获语句) catch(IOException e){System.out.println(”输入输出异常“);} //捕获数值转化时的异常,如不能将字符转化成数值 catch(NumberFormatException e){System.out.println(”数值格式异常,重新输入“); } //捕获除数为0的异常 catch(ArithmeticException e){System.out.println(”除数为0,重新输入“);} } }(11)(1)MyException类: package exp2_11;public class MyException extends Exception{ MyException(String msg){ super(msg);} }(2)Div主类: package exp2_11;import java.io.*;public class Div { public static void main(String args[])throws MyException{ try{ BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); System.out.print(”请输入实数除法运算的被除数:“); String str = in.readLine(); double a = Double.parseDouble(str); System.out.print(”请输入除数:“); str = in.readLine(); double b = Double.parseDouble(str); System.out.println(”商结果:“+division(a,b)); } catch(ArithmeticException e1){ System.out.println(”商结果:Infinity“+e1); System.out.println(”商结果:NaN“+e1); } catch(NumberFormatException e2){ System.out.println(”异常:字符串不能转换成整数!“+e2); } catch(IOException e3){ System.out.println(”异常:IO异常“+e3); } finally{ System.out.println(”程序结束!“); } } static double division(double a,double b)throws MyException{ if(a==100 &&(b==4 || b==13)) throw new MyException(”不符规范“); else return(a/b);} } 四、实验结果与分析(程序运行结果及其分析) (1) 去掉Man类的public修饰,程序运行不出来,提示缺少Man的公开方法。(2) (3) (4) (5) (6) (7) (8) (9) (10) (11) 五、实验体会(遇到问题及解决办法,编程后的心得体会) 学习程序设计的基本目的就是培养描述实际问题的程序化解决方案的关键技能Java面向对象程序设计是一门实践性比较强的课程在实际中我们必须把理论和实践结合起来。在实验中我们对照课本的知识然后进行实际的操作而后发现实际的运用比课本提到的要多很多理论总是来源于实践我们必须在现有的理论的基础上进行有效地实践。而这次实验也让我看到了现在学习的一个很大弱点就是实践的实践往往很少。在现实社会中我们必须懂得实际的操作才能更好的服务于社会。所以我必须在以后的学习中多动手多实际操作争取能在实践中找到属于自己新的感悟,终于在学习Java时达到了事半功倍的效果。 实验项目名称: 图形用户界面 实验学时: 6 同组学生姓名: ———— 实验地点: 工科楼A101 实验日期: 17.5.9~17.5.23 实验成绩: 批改教师: 刘晶 批改时间: 实验3 图形用户界面 一、实验目的和要求 (1)掌握Swing组件的使用方法; (2)熟练掌握Swing中常用布局管理器的使用方法;(3)掌握用户界面动作与事件的处理程序的编写方法;(4)熟练掌握构造用户界面的方法和常见界面元素的使用;(5)熟练掌握Java绘图的主要方法。 (6)调试程序要记录调试过程中出现的问题及解决办法; (7)编写程序要规范、正确,上机调试过程和结果要有记录,不断积累编程及调试经验; (8)做完实验后给出本实验的实验报告。 二、实验仪器和设备 奔腾以上计算机,Windows 操作系统,装有JDK1.6和Eclipse4.2软件。 三、实验过程 1.计算器设计 2.整数进制转换 将一个十进制整数分别转换成二进制、八进制和十六进制整数。 3.模拟裁判评分。 设计如图所示图形界面,显示n个裁判的评分,根据制定规则计算出最后得分。要求:图形界面采用表格显示裁判评分,随裁判人数变化而变化;指定分数范围,若超出,则异常处理; 得分规则有指定接口约定,由多个接口对象给出多种得分规则,如求平均数值,或去掉一个最高分和一个最低分后,再求平均值。 4.编译运行下例,然后修改程序,当使用鼠标单击后在另一位置重新绘制月亮。【例】 在Applet中画月亮。import java.awt.*;import java.applet.Applet;public class MoonApplet extends Applet { public void paint(Graphics g)//在Applet上绘图 { g.setColor(Color.red);g.drawString(”The Moon“,100,20);int x=0,y=0;//圆外切矩形左上角坐标 x = this.getWidth()/4;y = this.getHeight()/4;int diameter = Math.min(this.getWidth()/2, this.getHeight()/2);//圆的直径 g.setColor(Color.yellow);g.fillOval(x,y,diameter,diameter);//画圆 g.setColor(this.getBackground());//设置为背景色 g.fillOval(x-20,y-20,diameter,diameter);//画圆 } } 5.根据阿基米德螺线的极坐标方程:r=aθ画出相应图形。 要求: (1)注意选用适当的布局管理器设计图形用户界面,比较它们的布局情况; (2)养成良好的编程习惯,严格按照命名规则为包、类及类成员命名,将每个程序打包,包的命名方式如three.num1表示实验三的第一题;(3)学会使用Eclipse的各种调试方法; (4)学会查阅Java API文档,如查找事件类的处理里方法。 程序清单: (建议程序中适当添加注释信息,增强可读性;较长程序可分栏书写,保证报告排版整洁美观。) 1.import java.awt.BorderLayout;import java.awt.GridLayout;import java.awt.event.*;import javax.swing.*; public class Calulator implements ActionListener { JTextField t1;JPanel p1;JFrame f;static int count=1;static float value=0;int p2=0;String p;public Calulator(){f=new JFrame(”Calulator“);f.setSize(400,200);p1=new JPanel();t1=new JTextField(30);t1.setHorizontalAlignment(JTextField.RIGHT);p1.setLayout(new GridLayout(5,4));f.add(t1);String str[]= {”开根“,”+“,”-“,”清零“,”7“,”8“,”9“,”/“,”4“,”5“,”6“,”*“,”1“,”2“,”3“,”负“,”0“,”.“,”正“,”=“};for(int i=0;i<20;i++){JButton b=new JButton(str[i]);p1.add(b);b.addActionListener(this);} f.add(t1,BorderLayout.CENTER);f.add(p1,BorderLayout.SOUTH);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setVisible(true);} public void actionPerformed(ActionEvent e){ String c = e.getActionCommand();if(c==”0“||c==”1“||c==”2“||c==”3“||c==”4“||c==”5“||c==”6“||c==”7“||c==”8“||c==”9“||c==”.“){if(p2==0){t1.setText(c);p2++;} else {t1.setText(t1.getText()+c);p2++;}} else if(p==”清零“){value=0;t1.setText(String.valueOf(value));} else {count++;p2=0;if(count==2){p=c;value=Float.parseFloat(t1.getText());} if(c==”=“){ if(p==”开根“){value=(float)Math.sqrt(Float.parseFloat(t1.getText()));t1.setText(String.valueOf(value));count-=2;} else if(p==”+“){value+=Float.parseFloat(t1.getText());count-=2;} else if(p==”-“){ value-=Float.parseFloat(t1.getText());count-=2;} else if(p==”*“){value*=Float.parseFloat(t1.getText());count-=2;} else if(p==”/“){ value/=Float.parseFloat(t1.getText());count-=2;} else if(p==”正”){value=Math.abs(Float.parseFloat(t1.getText()));t1.setText(String.valueOf(value));count-=2;} else if(p==”负“){value=-1*Float.parseFloat(t1.getText());t1.setText(String.valueOf(value));count-=2;} t1.setText(String.valueOf(value));value=0;}} } public static void main(String[] args){ new Calulator();}} 2.import java.awt.*;import java.awt.event.*;import javax.swing.*;public class ZhuanH extends JFrame implements ActionListener{ TextField t1,t2,t3,t4;public ZhuanH(){super(”十进制整数转换“);this.setBackground(Color.BLUE);t1=new TextField(5);t2=new TextField(5);t3=new TextField(5);t4=new TextField(5);t1.setText(null);this.setSize(400,200);this.setLayout(new GridLayout(4,2));this.add(new Label(”十进制“));this.add(t1);t1.addActionListener(this);this.add(new Label(”二进制“));this.add(t2);this.add(new Label(”八进制“));this.add(t3);this.add(new Label(”十六进制“));this.add(t4);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setVisible(true);} public void actionPerformed(ActionEvent e){ String c = t1.getText();t2.setText(Integer.toBinaryString(Integer.parseInt(c)));t3.setText(Integer.toOctalString(Integer.parseInt(c))); t4.setText(Integer.toHexString(Integer.parseInt(c)));} public static void main(String[] args){ new ZhuanH();}} 3.import java.awt.*;import java.awt.event.*;import javax.swing.*;public class PingFen extends JFrame implements ActionListener{ JPanel p,p1;JTextField t;JTextField t1[]=new JTextField[10];JButton b;float s=0,k;int t2,t3;public PingFen(){ super(”模拟裁判评分“);this.setSize(300,120);p1=new JPanel(new GridLayout(2,5));this.add(p1,”North“);p=new JPanel(new FlowLayout(FlowLayout.RIGHT));this.add(p,”South“);b=new JButton(”平均分“);t=new JTextField(10);p.add(b);p.add(t);for(int i=0;i<10;i++){ t1[i]=new JTextField(6);t1[i].setText(null);p1.add(t1[i]);} b.addActionListener(this);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setVisible(true);} public void actionPerformed(ActionEvent e){float max,min;for(int i=0;i<10;i++){ try{ if(Float.parseFloat(t1[i].getText())>10.0)throw new Exception(); else continue;} catch(Exception ev){JOptionPane.showMessageDialog(this,t1[i].getText()+”超出范围“+”,“+” 请重新输入“);t1[i].setText(null);} } max=Float.parseFloat(String.valueOf(t1[0].getText()));min=Float.parseFloat(String.valueOf(t1[0].getText()));for(int i=1;i<10;i++){ if((k=Float.parseFloat(String.valueOf(t1[i].getText())))>max){max=k;t2=i;} else if((k=Float.parseFloat(String.valueOf(t1[i].getText()))) new PingFen();}} 4.import java.awt.*;import java.applet.Applet;import java.awt.event.*;public class MoonApplet extends Applet implements MouseListener { int x,y;public void init(){ x=this.getWidth()/4; y=this.getHeight()/4; addMouseListener(this);} public void paint(Graphics g)//在Applet上绘图 { g.setColor(Color.red);g.drawString(”The Moon“,100,20);int diameter = Math.min(this.getWidth()/2, this.getHeight()/2);//圆的直径 g.setColor(Color.yellow);g.fillOval(x,y,diameter,diameter);//画圆 g.setColor(this.getBackground());//设置为背景色 g.fillOval(x-20,y-20,diameter,diameter);//画圆 } public void mouseClicked(MouseEvent e){ x=e.getX();y=e.getY();repaint();} 5.package package2;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class LuoXuan extends JFrame implements ActionListener{ private static final long serialVersionUID = 1L;private LuoXuanCanvas canvas;//自定义画布组件 public LuoXuan(){super(”阿基米德螺线“);Dimension dim=getToolkit().getScreenSize();this.setBounds(dim.width/4,dim.height/4,dim.width/2,dim.height/2);JPanel p=new JPanel();this.add(p,”North“);JButton b=new JButton(”选择颜色“);p.add(b);b.addActionListener(this);this.canvas=new LuoXuanCanvas();this.getContentPane().add(this.canvas, ”Center“);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setVisible(true);} public void actionPerformed(ActionEvent e){Color c=JColorChooser.showDialog(this, ”选择颜色“, Color.BLUE);this.canvas.setColor(c);this.canvas.repaint();} public static void main(String[] args){ new LuoXuan();} } class LuoXuanCanvas extends Canvas {private Color color;public void LuoXuan(Color color){this.setColor(color);} public void setColor(Color color){this.color=color;} public void paint(Graphics g){int x0=this.getWidth()/2;int y0 = this.getHeight()/2;g.setColor(this.color);g.drawLine(x0, 0, x0, y0*2);g.drawLine(0, y0, x0*2, y0); for(int i=0;i<4000;i++){double angle=i*Math.PI/512;double radius=angle*0.5;int x=(int)Math.round(radius*angle*Math.cos(angle));int y=(int)Math.round(radius*angle*Math.sin(angle));g.drawOval(x0+x, y0+y, 1, 1);} }} 四、实验结果与分析(程序运行结果及其分析) (分析每题采用的布局管理器、事件处理类和主要功能实现方法)1.2.3.4.38 5.五、实验体会(遇到问题及解决办法,编程后的心得体会) 这次实验主要是对图形用户界面的设计,这里有鼠标触发的事件,就要让类实现MouseListener,在类里面实现MouseListener的方法,这里是选择单击时(mouseClicked()),这个方法,在方法体内用getX(),getY()方法来获取当前坐标。 实验项目名称:Java高级编程 实验学时: 4 同组学生姓名: ———— 实验地点: 工科楼A101 实验日期: 17.5.30~17.6.6 实验成绩: 批改教师: 刘晶 批改时间: 实验4 Java高级编程 一、实验目的和要求 (1)了解文件的概念和文件对象的创建方法;(2)掌握使用文件输入输出流读写文件的方法;(3)了解线程的基本概念和多线程程序设计的基本方法;(4)掌握数据库连接的方法; (5)创建SQL查询并更新数据库中的信息; (6)调试程序要记录调试过程中出现的问题及解决办法; (7)编写程序要规范、正确,上机调试过程和结果要有记录,不断积累编程及调试经验; (8)做完实验后给出本实验的实验报告。 二、实验仪器和设备 奔腾以上计算机,Windows 操作系统,装有JDK1.6和Eclipse4.2软件,MySQL数据库。 三、实验过程 (1)使用文件字节输入/输出流,合并两个指定文件;当文件中的数据已排序时,合并后的数据也要求是已排序的。 (2)将Java的关键字保存在一个文本文件中,判断一个字符串是否为Java的关键字。(3)编写在构造方法中产生一个1-5之间的随机数的继承Thread类的线程类DelayPrintThread,使得线程体每休眠此随机数时间就打印输出线程号和休眠时间;另外编写应用DelayPrintThread类的Java应用程序TwoThread.java,在main()方法中创建两个线程,并应用sleep()控制主应用程序延迟一段时间。 (4)编写继承Runnable接口的Applet多线程小程序类MultiThreadApplet,编写继承该类的Applet小程序类Clock,在Clock中重新构造父类的run()方法,实现数字时钟的功能,要求不断刷新显示时、分、秒。 (5)为学生信息表stuinfo设计数据库应用程序,包括数据的输入、删除和查询功能。 要求: (1)注意选用适当的文件流进行文件读写; (2)学会两种创建线程的方法,并比较使用场合; (3)养成良好的编程习惯,严格按照命名规则为包、类及类成员命名,将每个程序打包,包的命名方式如four.num1表示实验四的第一题;(4)学会查阅Java API文档,如查找常用工具类。 程序清单: (建议程序中适当添加注释信息,增强可读性;较长程序可分栏书写,保证报告排版整洁美观。)1.import java.io.*;import java.util.Arrays;public class File { private String Filename;static int s=0,t=0;public File(String Filename){this.Filename=Filename;} public void writeToFile(byte[] buffer)throws IOException {if(s==0){FileOutputStream fout = new FileOutputStream(this.Filename);s++;Arrays.sort(buffer);fout.write(buffer);this.readFromFile();fout.close();} else { FileOutputStream fout1 = new FileOutputStream(this.Filename,true);Arrays.sort(buffer);fout1.write(buffer);fout1.close();} } public void readFromFile()throws IOException { FileInputStream fin = new FileInputStream(this.Filename);if(t==0){System.out.println(”文件名“+”:“+this.Filename+”:“);t++;} else System.out.println(”合并两个文件后“+”:“+this.Filename+”:“);byte[] buffer = new byte[512];int count = fin.read(buffer);while(count!=-1){ for(int i=0;i byte[] buffer = {0,1,4,3,2,5,6,9,8,7};byte[] buffer1 = {10,11,12,14,15,17,16,19,20,13,18};File afile = new File(”ByteFile.dat“);afile.writeToFile(buffer);afile.writeToFile(buffer1);afile.readFromFile();} } 2.import java.io.*;public class File { private String Filename;public File(String Filename){this.Filename=Filename;} public void writerLine(String[] s)throws IOException {FileWriter f = new FileWriter(this.Filename);System.out.println(this.Filename+”文件中的java关键字有“+”:“);for(int i=0;i public void Text(String[] s,String[] s1){int i,j;for(i=0;i if(s1[i]==s[j]) {System.out.println(s1[i]+”是java中的关键字“);break;} else continue;if(j==s.length)System.out.println(s1[i]+”不是java中的关键字“);} } public static void main(String[] args)throws IOException { String[]s={”public“,”class“,”static“,”void“,”String“,”print“,”byte“,”boolean“,”int“,”short“,”long“,”throw“,”cath“,”continue“,”private“,”abstract“,”Interface“,”Exception“};String[] s1={”pblic“,”class“,”string“};File a=new File(”myfile.dat“);a.writerLine(s);a.Text(s,s1);} } 3.public class DelayPrintThread extends Thread{ private int number,time;public DelayPrintThread(int number) {this.number=number; time=(int)(Math.random()*5);} public void run(){ try { Thread.sleep(this.time);} catch(InterruptedException e){} System.out.println(”线程“+this.number+”:“+”休眠时间“+this.time);} public class TwoThread { public static void main(String[] args){ DelayPrintThread a=new DelayPrintThread(1);DelayPrintThread b=new DelayPrintThread(2);a.start();b.start();} } 4.import java.applet.Applet;import java.awt.*;import java.util.Date;import java.text.SimpleDateFormat;public class MultiThreadApplet extends Applet implements Runnable { Thread a;public void start(){ if(a==null){a=new Thread(this); a.start();} } public void stop(){ if(a!=null){ a.stop(); a=null;} } public void run(){} public void paint(Graphics g){SimpleDateFormat sdf=new SimpleDateFormat(”yyyy年MM月dd日E a hh时 mm分ss秒“);g.drawString(sdf.format(new Date()),50,100);} } public class Clock extends MultiThreadApplet{ public void run(){ repaint();try{a.sleep(1000);} catch(InterruptedException e){} }} 5.import java.sql.*;public class Statement{ public static void main(String args[])throws Exception { Class.forName(”sun.jdbc.odbc.JdbcOdbcDriver“);Connection conn=DriverManager.getConnection(”jdbc:odbc:student“);Statement stmt=conn.createStatement();String Sql=”SELECT stu_id,stu_name,city FROM student WHERE stu_id=5“;String Sql=”INSERT INTO student(stu_id,stu_name,city)VALUES('5','小红','徐州')“;String Sql=”DELETE FROM student WHERE stu_id=5“;int count=stmt.executeUpdate(Sql);System.out.println(”插入“+count+”行“);ResultSet rs=stmt.executeQuery(Sql);if(rs.next()){System.out.println(”行“+rs.getRow()+”:“+rs.getString(1)+”,“+rs.getString(2)+”,“+rs.getString(3));} else System.out.println(”没有数据“);count=stmt.executeUpdate(Sql);rs=stmt.executeQuery(Sql);if(rs.next()){System.out.println(”行“+rs.getRow()+”:“+rs.getString(1)+”,“+rs.getString(2)+”,“+rs.getString(5));} else System.out.println(”没有数据");} } 四、实验结果与分析(程序运行结果及其分析)1.45 2.3.4.五、实验体会(遇到问题及解决办法,编程后的心得体会) 通过这次实验,我基本能够理解线程的运行了,学会调用Thread类中的系统函数以及掌握这些函数的作用是难点,start()是开辟一条新线程。子类重写父类的run()方法,里面用sleep,来控制每个线程的休眠时间,但是得注意这里应该要用try-catch语句来捕获中断异常。 河北北方学院信息科学与工程学院 《Java程序设计》 实 验 报 告 实验学期 2014 至 2015 学年 第 2 学期 学生所在系部 信息科学与工程学院 年级 2012 专业班级 电子三班 学生姓名 冯洋 学号 201242220 任课教师 实验成绩 实验七 GUI标准组件及事件处理 一、课程设计目的: 《面向对象程序设计》是一门实践性很强的计算机专业基础课程,课程设计是学习完该课程后进行的一次较全面的综合练习。其目的在于通过实践加深学生对面向对象程序设计的理论、方法和基础知识的理解,掌握使用Java语言进行面向对象设计的基本方法,提高运用面向对象知识分析实际问题、解决实际问题的能力,提高学生的应用能力。 二、实验要求: 设计一个简单的文本编辑器,具有如下基本功能: 1)所见即所得的文本输入; 2)能方便地选中文本、复制、删除和插入文本; 3)具有一般编辑器所具有的查找和替换功能; 4)简单的排版,如设置字体和字号等。 三、课程设计说明: 1、需求分析:简单文本编辑器提供给用户基本的纯文本编辑功能,能够将用户录入的文本存储到本地磁盘中。能够读取磁盘中现有的纯文本文件,以及方便用户进行需要的编辑功能。文件操作能够实现新建、保存、打开文档等,编辑操作能过实现文本的剪贴、复制、粘贴等,格式操作能过实现字体设置、背景等,帮助操作能够实现关于主题的查看等功能 2、概要设计: (一)其基本功能包括: ① 基本的文本操作功能。包括新建,保存,打开,保存。 ② 基本的编辑功能。包括复制,剪贴,粘贴。③ 基本的格式功能,字体。④ 简单的帮助,关于主题。 (二)主要的组件包括: ① 基本的Frame框架; ② 菜单; ③ 打开文件对话框; ④ 保存文件对话框; ⑤ 颜色对话框; ⑥ 简单的帮助框架。 3、程序说明: 整个记事本分成:Jframe程序主体框架,Jmenu菜单栏、JtextArea文本输入区、PopupMenu右键菜单、JscrollPane滚动条、FonDialog字体类等。 本程序中首先定义一个Java Yang类继承JFrame作为最底层容器。要想记事本完成需求分析中相应的功能,还必须添加事件监听器。事件监听器不仅要添加在菜单栏和内容输入区,还需加在容器中。本程序中ActListener实现了ActionListener接口,用来监听并处理所有菜单项和内容输入区为事件源的事件。另外,还用来WindowListener来监听处理容器关闭触发的事件,WindowListener继承了WindowsAdapter类并覆盖了WindowsClosing方法。 四、程序调试: 1、调试分析: (1)关于打开、保存和退出我运用了文件对话框, openFileDialog、saveFileDialog和System.exit()以及文件输入输出流来实现,新建功能我选用了 textArea.setText()方法.(2)对于剪贴,粘贴,复制的实现则用 复制 String text = textArea.getSelectedText();StringSelection selection= new StringSelection(text);clipboard.setContents(selection,null);粘贴 Transferable contents = clipboard.getContents(this);if(contents==null)return;String text;text=“";try { text =(String)contents.getTransferData(DataFlavor.stringFlavor);} catch(Exception ex){ } textArea.replaceRange(text,textArea.getSelectionStart(),textArea.getSelectionEnd());(3)至于字体功能的实现,则是新建了一个字体类,在这个类中设置了字形,字体以及大小并且有字体样式可预览用户当前的设置。FlowLayout()设置布局,setSize()设置大小add()添加需要用的原件。 添加监听器获取选择用户的字号大小 public void itemStateChanged(ItemEvent event){ size =(new Integer((String)event.getItem()).intValue());setCustomFont(new Font(name, type, size));} 设置字体 private void setCustomFont(Font customFont){ this.customFont = customFont;area.setFont(customFont);area.revalidate();} 获取字体 public Font getCustomFont(){ return(this.customFont);} 附录:源代码 //记事本主体类 import java.awt.event.*;import java.awt.*;import java.io.*;import java.awt.datatransfer.*;import javax.swing.*; import java.awt.print.PrinterException; public class MiniNote extends JFrame implements ActionListener { JMenuBar menuBar = new JMenuBar();JMenu file = new JMenu(”文件(F)“), //菜单 edit = new JMenu(”编辑(E)“), format = new JMenu(”格式(O)“), view = new JMenu(”查看(V)“), help = new JMenu(”帮助(H)“); JMenuItem[] menuItem ={ //菜单下拉项 new JMenuItem(”新建(N)“), new JMenuItem(”打开(O)“), new JMenuItem(”保存(S)“), new JMenuItem(”打印(P)“), new JMenuItem(”全选(A)“), new JMenuItem(”复制(C)“), new JMenuItem(”剪切(T)“), new JMenuItem(”粘贴(P)“), new JMenuItem(”自动换行(W)“), new JMenuItem(”字体(F)“), new JMenuItem(”状态栏(S)“), new JMenuItem(”帮助主题(H)“), new JMenuItem(”关于记事本(A)“), new JMenuItem(”页面设置(U)“), new JMenuItem(”退出(X)“), new JMenuItem(”查找(F)“), new JMenuItem(”查找下一个(N)“), new JMenuItem(”替换(R)“)}; JPopupMenu popupMenu = new JPopupMenu();;//右键菜单 JMenuItem [] menuItem1 ={ new JMenuItem(”撤销(Z)“), new JMenuItem(”剪切(X)“), new JMenuItem(”复制(C)“), new JMenuItem(”粘贴(V)“), new JMenuItem(”删除(D)“), new JMenuItem(”全选(A)“), }; private JTextArea textArea;//文本区域 private JScrollPane js;//滚动条 private JPanel jp;private FileDialog openFileDialog;//打开保存对话框 private FileDialog saveFileDialog;private Toolkit toolKit;//获取默认工具包。private Clipboard clipboard;//获取系统剪切板 private String fileName;//设置默认的文件名 /** * MiniEdit 方法定义 * * 实现记事本初始化 * **/ public MiniNote(){ fileName = ”无标题“;toolKit = Toolkit.getDefaultToolkit();clipboard = toolKit.getSystemClipboard();textArea =new JTextArea();js = new JScrollPane(textArea);jp = new JPanel();openFileDialog = new FileDialog(this,”打开“,FileDialog.LOAD);saveFileDialog = new FileDialog(this,”另存为“,FileDialog.SAVE); js.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);jp.setLayout(new GridLayout(1,1));jp.add(js);textArea.setComponentPopupMenu(popupMenu);//文本区域添加右键 textArea.add(popupMenu);add(jp);setTitle(”迷你记事本“);setFont(new Font(”Times New Roman“,Font.PLAIN,15));setBackground(Color.white);setSize(800,600);setJMenuBar(menuBar);menuBar.add(file);menuBar.add(edit);menuBar.add(format);menuBar.add(view);menuBar.add(help);for(int i=0;i<4;i++){ file.add(menuItem[i]);edit.add(menuItem[i+4]);} for(int i=0;i<3;++i){ edit.add(menuItem[i+15]);} for(int i=0;i<2;++i){ format.add(menuItem[i+8]);help.add(menuItem[i+11]);} view.add(menuItem[10]);file.add(menuItem[14]);for(int i=0;i<6;++i){ popupMenu.add(menuItem1[i]);} //窗口监听 addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ e.getWindow().dispose();System.exit(0);} });//注册各个菜单项的事件监听器 for(int i=0;i Object eventSource = e.getSource();if(eventSource == menuItem[0])//新建动作 { textArea.setText(”“);} else if(eventSource == menuItem[1])//打开动作 { openFileDialog.setVisible(true);fileName = openFileDialog.getDirectory()+openFileDialog.getFile();if(fileName!= null){ openFile(fileName);} } else if(eventSource ==menuItem[2])//保存动作 { saveFileDialog.setVisible(true);fileName = saveFileDialog.getDirectory()+saveFileDialog.getFile();if(fileName!=null){ writeFile(fileName);} } else if(eventSource==menuItem[14])//退出动作 { System.exit(0);} else if(eventSource == menuItem[4]||eventSource == menuItem1[5])//全选动作 { textArea.selectAll();} else if(eventSource == menuItem[5]||eventSource == menuItem1[2])//复制动作 { String text = textArea.getSelectedText();StringSelection selection= new StringSelection(text);clipboard.setContents(selection,null);} else if(eventSource == menuItem[6]||eventSource == menuItem1[1])//剪切动作 { String text = textArea.getSelectedText();StringSelection selection = new StringSelection(text);clipboard.setContents(selection,null);textArea.replaceRange(”“, textArea.getSelectionStart(), textArea.getSelectionEnd());} else if(eventSource == menuItem[7]||eventSource == menuItem1[3])//粘贴动作 { Transferable contents = clipboard.getContents(this);if(contents==null)return;String text;text=”“;try { text =(String)contents.getTransferData(DataFlavor.stringFlavor);} catch(Exception ex){ } textArea.replaceRange(text, textArea.getSelectionStart(),textArea.getSelectionEnd());} else if(eventSource == menuItem[8])//自动换行 { if(textArea.getLineWrap())textArea.setLineWrap(false);else textArea.setLineWrap(true); } else if(eventSource == menuItem[9])//字体 {//实例化字体类 FontDialog fontdialog = new FontDialog(new JFrame(),”字体“,true);textArea.setFont(fontdialog.showFontDialog());//设置字体 } else if(eventSource == menuItem[11])//帮助 { try { String filePath = ”C:/WINDOWS/Help/notepad.hlp“;Runtime.getRuntime().exec(”cmd.exe /c “+filePath);} catch(Exception ee){ JOptionPane.showMessageDialog(this,”打开系统的记事本帮助文件出错!“,”错误信息“,JOptionPane.INFORMATION_MESSAGE);} } else if(eventSource == menuItem[12])//关于记事本 { String help = ”记事本 版本1.0n操作系统:WIN 8 n编译器:eclipsen版权“ + ”所有: ESTON YANG n最终解释权归本人所有“ + ”“ + ”nBuild By 冯洋“ + ”n课程设计:JAVA“;JOptionPane.showConfirmDialog(null, help, ”关于记事本“, JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE); } else if(eventSource == menuItem[15]||eventSource == menuItem[16])//查找下一个 { search(); } else if(eventSource == menuItem[17])//替换 { substitude();} else if(eventSource == menuItem[3])//打印 { try { textArea.print();} catch(PrinterException e1){ e1.printStackTrace();} } } /** * openFile方法 * * 从TXT读进数据到记事本 * **/ public void openFile(String fileName){ try { File file = new File(fileName);FileReader readIn = new FileReader(file);int size =(int)file.length();int charsRead = 0;char[] content = new char[size];while(readIn.ready()){ charsRead += readIn.read(content,charsRead,size-charsRead);} readIn.close();textArea.setText(new String(content,0,charsRead));} catch(Exception e){ System.out.println(”Error opening file!“);} } /** * saveFile方法 * * 从记事本写进数据到TXT * **/ public void writeFile(String fileName){ try { File file = new File(fileName);FileWriter write = new FileWriter(file);write.write(textArea.getText());write.close();} catch(Exception e){ System.out.println(”Error closing file!“);} } /** * substitude方法 * * 实现替换功能 * */ public void substitude(){ final JDialog findDialog = new JDialog(this, ”查找与替换“, true);Container con = findDialog.getContentPane();con.setLayout(new FlowLayout(FlowLayout.LEFT));JLabel searchContentLabel = new JLabel(”查找内容(N):“);JLabel replaceContentLabel = new JLabel(”替换为(P):“);final JTextField findText = new JTextField(30);final JTextField replaceText = new JTextField(30);final JCheckBox matchcase = new JCheckBox(”区分大小写(C)“);ButtonGroup bGroup = new ButtonGroup();final JRadioButton up = new JRadioButton(”向上(U)“);final JRadioButton down = new JRadioButton(”向下(D)“);down.setSelected(true);//默认向下搜索 bGroup.add(up);bGroup.add(down); JButton searchNext = new JButton(”查找下一个(F)“);JButton replace = new JButton(”替换(R)“);final JButton replaceAll = new JButton(”全部替换(A)“); //”替换“按钮的事件处理 replace.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ if(replaceText.getText().length()== 0 && textArea.getSelectedText()!= null) textArea.replaceSelection(”“);if(replaceText.getText().length()> 0 && textArea.getSelectedText()!= null) textArea.replaceSelection(replaceText.getText());} }); //”替换全部“按钮的事件处理 replaceAll.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ textArea.setCaretPosition(0);//将光标放到编辑区开头 int a = 0, b = 0, replaceCount = 0;if(findText.getText().length()== 0){ JOptionPane.showMessageDialog(findDialog, ”请填写查找内容!“, ”提示“,JOptionPane.WARNING_MESSAGE);findText.requestFocus(true);return;} while(a >-1){ int FindStartPos = textArea.getCaretPosition();//获取光标位置 String str1, str2, str3, str4, strA, strB;str1 = textArea.getText();str2 = str1.toLowerCase();str3 = findText.getText();str4 = str3.toLowerCase();if(matchcase.isSelected())//大小写区分 { strA = str1;strB = str3;} else { strA = str2;strB = str4;} if(up.isSelected())//向上搜索 { if(textArea.getSelectedText()== null){ a = strA.lastIndexOf(strB, FindStartPos1);} } else //向下搜索 { if(textArea.getSelectedText()== null){ a = strA.indexOf(strB, FindStartPos); } else { a = strA.indexOf(strB, FindStartPos-findText.getText().length()+ 1);} } if(a >-1){ if(up.isSelected()){ textArea.setCaretPosition(a);b = findText.getText().length();textArea.select(a, a + b);} else if(down.isSelected()){ textArea.setCaretPosition(a);b = findText.getText().length();textArea.select(a, a + b);} } else { if(replaceCount == 0){ JOptionPane.showMessageDialog(findDialog,”找不到您查找的内容!“, ”记事本“,JOptionPane.INFORMATION_MESSAGE);} else { JOptionPane.showMessageDialog(findDialog, ”成功替换“+ replaceCount + ”个匹配内容!“, ”替换成功“,JOptionPane.INFORMATION_MESSAGE);} } if(replaceText.getText().length()== 0&& textArea.getSelectedText()!= null)//用空字符代替选定内容 { textArea.replaceSelection(”“);replaceCount++;} if(replaceText.getText().length()> 0&& textArea.getSelectedText()!= null)//用指定字符代替选定内容 { textArea.replaceSelection(replaceText.getText());replaceCount++;} }//end while } }); //”查找下一个“按钮事件处理 searchNext.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ int a = 0, b = 0;int FindStartPos = textArea.getCaretPosition();String str1, str2, str3, str4, strA, strB;str1 = textArea.getText();str2 = str1.toLowerCase();str3 = findText.getText();str4 = str3.toLowerCase(); //”区分大小写“的CheckBox被选中 if(matchcase.isSelected())//区分大小写 { strA = str1;strB = str3;} else //不区分大小写 { strA = str2;strB = str4;} if(up.isSelected())//向上搜索 { if(textArea.getSelectedText()== null){ a = strA.lastIndexOf(strB, FindStartPosfindText.getText().length()findText.getText().length()+ 1);} } if(a >-1){ if(up.isSelected()){ textArea.setCaretPosition(a);b = findText.getText().length();textArea.select(a, a + b);} else if(down.isSelected()){ textArea.setCaretPosition(a);b = findText.getText().length();textArea.select(a, a + b);} } else { JOptionPane.showMessageDialog(null, ”找不到您查找的内容!“, ”记事本“, JOptionPane.INFORMATION_MESSAGE);} } }); //”取消“按钮及事件处理 JButton cancel = new JButton(”取消“);cancel.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ findDialog.dispose();} });//创建”查找与替换“对话框的界面 JPanel bottomPanel = new JPanel();JPanel centerPanel = new JPanel();JPanel topPanel = new JPanel();JPanel direction = new JPanel(); direction.setBorder(BorderFactory.createTitledBorder(”方向“));direction.add(up);direction.add(down); JPanel replacePanel = new JPanel();replacePanel.setLayout(new GridLayout(1, 2));replacePanel.add(searchNext);replacePanel.add(replace);replacePanel.add(replaceAll);replacePanel.add(cancel); topPanel.add(searchContentLabel);topPanel.add(findText); centerPanel.add(replaceContentLabel);centerPanel.add(replaceText);centerPanel.add(replacePanel); bottomPanel.add(matchcase);bottomPanel.add(direction); con.add(replacePanel);con.add(topPanel);con.add(centerPanel);con.add(bottomPanel); //设置”查找与替换“对话框的大小、可更改大小(否)、位置和可见性 findDialog.setSize(550, 240);findDialog.setResizable(true);findDialog.setLocation(230, 280);findDialog.setVisible(true);}//方法mySearch()结束 /** * search方法 * * 实现查找功能 * */ public void search(){ final JDialog findDialog = new JDialog(this, ”查找下一个“, true);Container con = findDialog.getContentPane();con.setLayout(new FlowLayout(FlowLayout.LEFT));JLabel searchContentLabel = new JLabel(” 查找内容(N):“); final JTextField findText = new JTextField(17);final JCheckBox matchcase = new JCheckBox(”区分大小写(C)“);ButtonGroup bGroup = new ButtonGroup();final JRadioButton up = new JRadioButton(”向上(U)“);final JRadioButton down = new JRadioButton(”向下(D)“);down.setSelected(true);//默认向下搜索 bGroup.add(up);bGroup.add(down); JButton searchNext = new JButton(”查找下一个(F)“); //”查找下一个“按钮事件处理 searchNext.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ int a = 0, b = 0;int FindStartPos = textArea.getCaretPosition();String str1, str2, str3, str4, strA, strB;str1 = textArea.getText();str2 = str1.toLowerCase();str3 = findText.getText();str4 = str3.toLowerCase(); //”区分大小写“的CheckBox被选中 if(matchcase.isSelected())//不区分大小写 { strA = str1;strB = str3;} else //区分大小写 { strA = str2;strB = str4;} if(up.isSelected())//向上搜索 { if(textArea.getSelectedText()== null){ a = strA.lastIndexOf(strB, FindStartPosfindText.getText().length()findText.getText().length()+ 1);} } if(a >-1){ if(up.isSelected()){ textArea.setCaretPosition(a);b = findText.getText().length();textArea.select(a, a + b);} else if(down.isSelected()){ textArea.setCaretPosition(a);b = findText.getText().length();textArea.select(a, a + b);} } else { JOptionPane.showMessageDialog(null, ”找不到您查找的内容!“, ”记事本“, JOptionPane.INFORMATION_MESSAGE);} } }); //”取消“按钮及事件处理 JButton cancel = new JButton(” 取消 “);cancel.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ findDialog.dispose();} });//创建”替换“对话框的界面 JPanel bottomPanel = new JPanel();JPanel centerPanel = new JPanel();JPanel topPanel = new JPanel();JPanel direction = new JPanel();direction.setBorder(BorderFactory.createTitledBorder(”方向“));direction.add(up);direction.add(down);topPanel.add(searchContentLabel);topPanel.add(findText);topPanel.add(searchNext);bottomPanel.add(matchcase);bottomPanel.add(direction);bottomPanel.add(cancel);con.add(topPanel);con.add(centerPanel);con.add(bottomPanel);//设置”替换“对话框的大小、可更改大小(否)、位置和可见性 findDialog.setSize(425, 200);findDialog.setResizable(true);findDialog.setLocation(230, 280);findDialog.setVisible(true);} /** * 主函数 * * * **/ public static void main(String[] args){ MiniNote note = new MiniNote();note.setVisible(true);} } //字体类 import java.awt.Font;import java.awt.GraphicsEnvironment;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.ItemEvent;import java.awt.event.ItemListener;import java.awt.*;import javax.swing.*;import java.awt.event.*;import javax.swing.border.*;import java.util.*;public class FontDialog { private Dialog fontdialog;private JButton okButton, cancelButton;private int width = 480;private int height = 250;private String name = ”Serif“;private int type = 0;private int size = 12;private Font customFont = new Font(”宋体“, Font.ITALIC, 12);private boolean okpressed = false;private boolean cancelpressed = false;private JLabel lbl1 = new JLabel(”字体:“);private JLabel lbl2 = new JLabel(”字形:“);private JLabel lbl3 = new JLabel(”大小:“);private JTextArea area;String[] zx = { ”常规“, ”加粗“, ”斜体“, ”基线“ };String[] dx = {”8“ , ”9“ , ”10“, ”12“, ”14“, ”15“, ”16“, ”18“,”20“, ”21“, ”22“, ”24“, ”26“, ”28“, ”30“, ”36“,”48“, ”54“,”72“ , ”89“};JLabel lbl = new JLabel(”字体样式Style“);private JComboBox cb1, cb3 = new JComboBox(dx), cb2 = new JComboBox(zx);private String[] zt; public FontDialog(Frame owner, String title, boolean modal){ init();fontdialog = new Dialog(owner, title, modal);fontdialog.setLocation(owner.getLocation());fontdialog.setLayout(new FlowLayout());fontdialog.setSize(getWidth(), getHeight());fontdialog.add(lbl1);fontdialog.add(cb1);fontdialog.add(lbl2);fontdialog.add(cb2);fontdialog.add(lbl3);fontdialog.add(cb3);fontdialog.add(okButton);fontdialog.add(cancelButton);fontdialog.add(area);fontdialog.setResizable(false);fontdialog.setAlwaysOnTop(true);cancelButton.addActionListener(new fontListener());okButton.addActionListener(new fontListener());fontdialog.addWindowListener(new fontListener()); cb1.addItemListener(new ItemListener(){ // public void itemStateChanged(ItemEvent event){ //获取选择用户的字体类型 name =(String)event.getItem();setCustomFont(new Font(name, type, size));} }); cb2.addItemListener(new ItemListener(){ // public void itemStateChanged(ItemEvent event){ //获取选择用户的字形 String s =(String)event.getItem();if(s.equals(”常规“)){ type = Font.PLAIN;setCustomFont(new Font(name, type, size));} else if(s.equals(”加粗“)){ type = Font.BOLD; 字体动作 添加监听器字形动作 添加监听器 setCustomFont(new Font(name, type, size));} else if(s.equals(”斜体“)){ type = Font.ITALIC;setCustomFont(new Font(name, type, size));} else { type = Font.CENTER_BASELINE;setCustomFont(new Font(name, type, size));} } }); cb3.addItemListener(new ItemListener(){ //大小动作 public void itemStateChanged(ItemEvent event){ //添加监听器获取选择用户的字号大小 size =(new Integer((String)event.getItem()).intValue());setCustomFont(new Font(name, type, size));} }); } public Font showFontDialog(){ fontdialog.setVisible(true);if(okpressed){ return getCustomFont();} else { return customFont;} } private void init(){ //初始化 okButton = new JButton(”确定“);cancelButton = new JButton(”取消“);GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();zt = ge.getAvailableFontFamilyNames();cb1 = new JComboBox(zt);cb1.setMaximumRowCount(6);area = new JTextArea(6, 30);cb3 = new JComboBox(dx);cb3.setMaximumRowCount(6);okButton.setFocusable(true);area.setEditable(false);area.setText(new Date().toString());area.setBorder(new TitledBorder(”字体样式"));} public void setWidth(int width){ this.width = width;} public void setHeight(int height){ this.height = height;} private int getWidth(){ return(this.width);} private int getHeight(){ return(this.height);} private void setCustomFont(Font customFont)//{ this.customFont = customFont;area.setFont(customFont);area.revalidate();} public String toString(){ return FontDialog.class.toString();} 设置字体 public Font getCustomFont()//获取字体 { return(this.customFont);} private class fontListener extends WindowAdapter implements ActionListener //监听事件类 { public void windowClosing(WindowEvent e){ fontdialog.dispose();} public void actionPerformed(ActionEvent e){ if(e.getSource()== cancelButton){ fontdialog.dispose();cancelpressed = true;} else if(e.getSource()== okButton){ okpressed = true;setCustomFont(new Font(name, type, size));fontdialog.dispose();} } } } 学 生 实 验 报 告 册 2013——2014学年第1学期 项目名称: Java Web 学院: 信电 班级: 11计算机科学与技术一班 学号: 155140007 姓名: 伍振东 指导教师: 李竹林 完成时间: 2013/9/28 一、实验要求 1.用HTML语言编写如下样式的网页 2.可以用Dreamweaver,推荐手动编写HTML带代码 3.图片从清华大学的网站自己取得。http://www.xiexiebang.com“> 文档为doc格式 实验报告一、 实验目的
巩固复习课上所讲内容,进一步熟悉面向对象编程。
二、 实验内容
编写程序求点到原点的距离三、 程序清单及运行结果
abstractclass Distance
{
abstra...... Java聊天室实验报告 班 级:学 号:姓 名: ****** ******** *** 目录: 一、实验目的.......................................................3 二、所需技术 ...................... 课程名称: 学生学号:学生姓名: 所属院部:指导教师: 学生实验报告 (理工类) JAVA程序设计专业班级: 20 15——20 16学年第2学期金陵科技学院教务处制 实验项目名称:JAVA编程基础实验...... 实验项目名称:实验4 基于Socket的网络编程 【实验目的】 1、 理解Java的基于套接字的网络通信原理。 2、 理解客户端和服务器的概念。 3、 学习使用套接字实现客户端和服务...... 广东工业大学实验报告 学院 专业 班学号姓名 成绩评定_______ 实验5 题目继承与接口实验 课程名称Java与面向对象程序设计 一.实验目的 (1)学习类的继承、子类在对象中调用...... Homework3实验报告 一、实验目的与要求 1、掌握Java中类和接口的基本知识; 2、继承的基本知识; 3、集合的基本操作 二、实验内容 1.PIMCollection 类 创建一个可以管理PIMEnti...... 中 南 民 族 大 学 实 验 报 告 2010—2011第二学期 课程名称: Java程序设计院系:计算机科学学院年级: 2009 专业:计算机科学与技术大班 学号: 09061060 姓 名: 李亚巧 指...... 《面向对象程序设计》实验报告与习题册 2013 / 2014 学年 第1学期 系 别 计算机科学与技术系 专 业 班 级 姓 名计算机软件 软件一班 罗晓薇朱强 指导教师 目 录 实验......第二篇:Java实验报告
第三篇:JAVA实验报告
第四篇:JAVA实验报告
第五篇:java实验报告
声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。 JAVA实验报告
JAVA聊天室实验报告
Java实验报告电子稿(汇编)
java实验报告4
java实验报告5范文合集
Java上机实验报告
java实验报告(精选五篇)
JAVA实验报告册范文合集