上机实验指导书-面向对象程序设计

更新时间:2024-07-05 19:26:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

(语言:Java)

姓 名:_________________

班级学号:_________________

院 系:_________________

指导原则:

为了使学生更快更好地掌握所学知识,技能和软件开发方法 目的:

掌握面向对象程序设计的基础知识 熟练使用Jcreator开发环境开发 掌握Java程序的调试技巧 掌握应用程序的开发步骤 要求:

1,每个实验应独立完成,并对重点内容(教师指定)写出实验的报告 2,实验报告在完成基本功能的情况下,应尽可能丰富其内容。 时间:

必须在下次上机前上交。

第一次上机作业 熟悉Jcreator/ eclipse集成开发环境

实验目的:

熟悉Java集成开发环境Jcreator/ eclipse的安装 熟悉Jcreator/ eclipse应用程序向导创建应用程序 掌握应用程序的编辑,编译,调试,运行四步骤。

掌握顺序结构程序设计:数据结构,语句(数据,运算符,表达式),程序流程(数据表示,输入,处理,输出) 实验内容:

1, Java集成开发环境Jcreator/ eclipse的安装 2, Jcreator/ eclipse应用程序向导创建应用程序

3, 用书上几个实例,掌握应用程序的编辑,编译,调试,运行四步骤 4,了解应用程序的基本结构 操作步骤:

Eclipse集成开发环境:

一, 软件的准备与安装与设置

1,软件下载:下载JDK安装文件,Eclipse压缩文件(已经安装了语言包与GUI插件) JAVA开发工具包(JDK:Java Se Development Kits)下载,

下载网址:http://www.oracle.com/technetwork/java/javase/downloads/index.html, 文件名:jdk-7u7-windows-i586.exe

下载Eclipse,网址:http://www.eclipse.org/downloads/

2, 安装。

JDK安装:找到下载目录(我的下载目录为:D:\\360云盘\\常用软件\\JAVA软件),双击下载文件jdk-7u7-windows-i586.exe,选择安装路径:默认C盘:。 Eclipse安装:找到Eclipse压缩文件,解压缩后直接复制到C:盘即可 3, 设置参数

3.1创建系统变量。步骤:依次点击“我的电脑”-右键-系统属性-环境变量-系统变量下方“新建”。然后在“新建系统变量对话框”中输入变量名:JAVA_HOME,变量值为JDK的安装文件夹路径,复制即可:C:\\Program Files\\Java\\jdk1.7.0_07

.2在上步,点击“环境变量后”,拖动“系统变量”下方的“滚动条”,找到路径:Path,双击,在显示路径最前面增加:java文件运行路径,固定格式:%JAVA_HOME%\\bin; 注意: 最后的分号“;”不能省

二, 进入成开发环境,编辑源程序文件

1, 进入集成开发环境:找到C盘根目录下的Eclipse目录下的eclipse.exe,双击启

动。

2, 设置文件存贮目录

3, 创建JAVA项目

依次点击:文件—新建—新建JAVA项目—“手动输入项目名称”—确定

4, 在项目下源程序文件目录下创建主类,注意:创建主类时,类名应与项目名一

致,且应选中:MAIN主方法 点击在类名前面的加号“+”,找到“src”目录(源程序文件目录),在该项目录上弹鼠标右键,在弹出菜单上点“新建”—“类”。

注:

1,在类名称中,输入名称与项目名称必须一致。

2,方法存根中,应该选中主方法:

5, 编辑源程序文件:主类名与主方法名是自动创建的,不能修改。

三, 编译调试与运行

编辑运行源程序文件:编辑好以后,点击:“运行”菜单下的“运行”按钮。

作业:

1, 应用程序向导新建java应用程序,工程名为exmaple.主方法(main方法)输入语

句为:system.out.println(“2+3=”+(2+3)+“2+3!=”+2+3);

程序运行结果:______________________________________

2, 新建java应用程序,工程名为:lengxing, 在主方法的大括号内输入如下语句:

int a,b,c,i;

for(i=100;i<1000;i++)

{ a=i/100; b=i0/10; c=i;

if(a*a*a+b*b*b+c*c*c= =i) System.out.println(i+” “); }

程序运行结果:

3, 应用向导创建名为studentscore的工程,文件内容如下(参照修改源程序文件): public class studentscore {

static int math,chinese,english,physic,chemic;

static float average() //成员函数或方法没有带参数 { float ave;

ave=math+chinese+english+physic+chemic; // 直接使用成员变量 ave/=5; return(ave); }

public static void main(String[] args) { math=90;chinese=80;english=70;physic=60;chemic=50; //直接给成员变量赋值 // TODO, add your application code System.out.println(average());

} }

试写出程序运行结果:______________________

第二次上机作业 掌握Ja va编程基础

实验目的:掌握Java应用程序的基本结构 掌握简单程序的设计与编程

巩固应用程序的编辑,编译,调试,运行四步骤

掌握应用程序在运行时输入参数的技巧。即主方法的参数设置技巧 掌握分支结构程序设计,根据程序流程写代码。根据代码写流程 实验要求: 实验内容:

1,调试如下程序,写出其流程图及数学表达式并写出相应的运行结果 public class Function { public static void main(String args[])throws IOException { float x, y; Scanner sc=new Scanner(System.in); x=sc.nextFloat(); if ( x<0 ) y = 0; else if ( x >0 && x <= 10 ) y = x; else if ( x > 10 && x <= 20 ) y = 10; else y = -0.5f * x + 20; System.out.println(\ System.out.println(\ } }

1, 并写出运行结果

数学表达式:

运行结果:

1组, 2组, 3组, 4组,

2,掌握主方法的参数设置技巧 操作步骤:

1, ECLIPSE环境下主方法的参数设置技巧: 以Factorial项目(主类名为项目名)为例。

a, 依次点击“运行”,“运行配置”,打开运行配置窗口

b, 点击“项目”下方右边的“浏览”按钮,选择主方法配置的类:Factorial c, 点击“main”类的右边“搜索”按钮,选择类Factorial

d, 点击“(x)=自变量”,在“程序自变量”下方文本框中输入5;

再点击最下方的“运行”按钮。多个参数用空格分开。如输入: 5 8 e, 观察运行结果。

调入程序,运行该程序,写出运行结果。

程序调入方法: 菜单“文件file”,然后点”打开open”,在弹出对话框中找到文件

所在的目录,双击需要打开的java文件即可

public class Factorial {

static long fac( int n ) { int i;

double jianchen=1; for(i=2;i<=n;i++)

jianchen=jianchen*i; return jianchen; }

public static void main(String[] args) // args为字符串数组,args[0]为第一个参数 { int k; long f; k = Integer.parseInt(args[0]);

// “Integer整数类“的静态方法parseInt,把数值型字符串args[0]转换为整数 // args[0]为主方法的第一个参数。多个参数用空格分开,无参数时直接回车。 f = fac(k); System.out.println(f); } }

第三次上机作业 熟悉应用程序的基本结构与程序调试技巧

实验目的: 掌握Java帮助文档的使用

熟悉应用程序的基本结构。 故意设置错误,观察错误提示信息,初步掌握程序的一般调试技巧。

实验要求: 实验内容:

1, 利用帮助文档查找String类和Math类的方法:Method summary,并举例说明。 2, 编写程序:掌握顺序结构和分支结构程序设计

3,实践一般调试技巧:设置断点,输出中间结果。错误部分单词下有符号“^”提示。 操作步骤:

一,Java“独立”帮助文档的使用:共享文件:”JAVA API官方文档中文版.chm” A, 在索引项目下键入查找关键字:如:math.

B, 在下方双击选中栏目,则在右边弹出相应栏目的详细说明。

以及数学类Math各常量Math.E,Math.PI与函数的详细说明:如下

C,使用数学类方法用如下公式求三角形面积:1/2*a*b*sinC: System.out.println(a*b*Math.sin(C*3.14/180)/2);

2、 在“查找结果对话框:Find Results”中找到相关条目后双击进入详细解释项目。 3、 String类的方法即Method summary有:_________________(含义:

________________) _________________(含义:________________)等

4、 Math类的方法有:floor()的含义_________________________________________;

random()的含义____________________________________________________;

二,思考题

试从网络上查找资料,找出当前保险营销员的税收计算工式和公务员的税收计算公式,编程计算月工资2000, 8000, 15000元时各应缴纳多少个人所得税。试做出一个合理的结论。 题目描述: 源程序代码:

运行结果及结论:

第四次上机作业 掌握循环结构程序设计

第四次上机作业 掌握数组的使用

实验目的:

掌握数组的定义与使用。

掌握一元数组及二元数组类对象属性.length的正确使用

掌握字符串类型String与其它数值型数据类型的转换(书P74) 掌握数学类Math成员函数的使用(书P90) 进一步掌握程序的基本结构 实验要求: 实验内容:

1, 程序填空,并写了程序运行运行结果 public class Prime { public static void main(String args[]) { short i, k; int N; String str_k; String str=new String(\ k=Short.parseShort(str); //把字符串str转换为整数k N=(int)Math.sqrt(k); //求k的平方根

}

for (i=2; i<=N; i++) if (k % i==0) break;

str_k=String.valueOf (k); //把整数k转换为字符串str if (i= =N)

System.out.println(str_k+\ else

System.out.println(str_k+\ }

2, 编写程序:

计算二维数组{{1,2,3},{4,5,6,7},{8,9,10,11,12,14,15}}中的最大值,最小值及其差值。

操作步骤:

1, 程序填空题,写出程序运行结果

2, 编写程序 源程序代码:(补充完整) public class exjava {

public static void main(String[] args) {

int c[][]={{1,2,3},{4,5,6,7},{8,9,10,11,12,13,14,15}}; int max=c[0][0],min=c[0][0],mean=c[0][0]; int i,j;

for(i=0;i<____.length;i++) for(j=0;j<________;j++) { if(maxc[i][j])min=c[i][j]; }

____________________;

System.out.println(\ } }

运行结果:

第五次上机作业 掌握类的定义与使用

实验目的:

了解类与对象的基本概念

掌握类与对象的定义格式及三种成员访问权限的作用

掌握类对象的初始化成员函数及输出成员函数

掌握类的构造函数,析构函数与内联函数的定义与使用 实验要求: 实验内容:

1, 程序填空及运行结果 class bj

{ __________________ //定义私有变量圆半径 _____________________//定义空构造函数

bj(float x) //定义空构造函数并初始化变量r。 {r=x;}

public void set_value(float x) //初始化圆半径的值 { r=x; }

_____________________ //求圆面积 { return(3.14*r*r); }

public double zc() //求圆周长 { double y; y=2*3.14*r; return(y); }

public static void main(String args[])

{ _______________________ //定义类bj对象(或类变量)并初始化 ex1.set_value(3.2f); //初始化bj类对象圆半径的值 System.out.println(\面积=\周长=\

______________________ //定义类bj对象并设置半径为5.5. System.out.println(\面积=\周长=\ } }

2, 编写程序

P91-8 源程序代码:

调试及运行结果:

参考答案:

bj ex2=new bj(5.5f); bj ex1=new bj(); public double mj() bj() { } private float r;

第六次上机作业 掌握类的继承与多态

实验目的:

巩固类的定义与构造函数等基本的运用 掌握类对象的重载与派生的概念与操作 实验要求: 实验内容:

根据P104,题8把以下程序补充完整,并运行 public class circle //定义类circle

{ public __________ float pi=3.14f; //定义类成员变量 private float x,y; private float r;

_______________________ // 定义公有带3个参数构造函数 {x=a;y=b;r=c; }

protected float getX() {return(x); }

protected float getY() {return(y); }

protected float getR() {return(r); }

protected float perimeter() {return(pi*r*2); }

protected float area()

{ _________________ //计算圆的面积 } }

public class cylinder ______________{ //继承类circle private float h;

cylinder(float a,float b,float c,float d)

{____________________ //调用父类构造函数 h=d; }

private float getH() {return(h); }

protected float area()

{ return(pi*2*______________ *h); //隐式调用父类成员r. }

private float volume()

{return(pi*getR()*getR()*h); }

private void display()

{System.out.println(\ System.out.println(\ System.out.println(\

System.out.println(\ System.out.println(\

System.out.println(\ }

public static void main(String[] args) { cylinder example=__________________

//以参数点(100,100),半径80,高90初始化圆柱体类对象

example.display(); }

运行结果:

参考答案: extends circle super(a,b,c);

new cylinder(100,100,80,90); public circle(float a,float b,float c) return(pi*r*r); getR()

static

第七次上机作业 掌握类的多态及综合应用

实验目的:

了解类与对象的基本概念

掌握类与对象的定义格式及三种成员访问权限的作用

掌握类对象的初始化成员函数及输出成员函数

掌握类的构造函数,析构函数与内联函数的定义与使用

掌握类对象的重载与派生的概念与操作

初步掌握类对象的综合应用,即能根据实际问题确定类对象的成员变量和成员函数。 实验要求: 实验内容: 试定义一个描述平面直角坐标系上的二次曲线f(x)=ax?bx?c的一个类CURVE,使用复合梯形公式求该曲线的区间[x1,x2]上的定积分。该公式如下:2?x2x1x2?x1f(x1)?f(x2)n?1,n为等分区间数 f(x)dx?h[??f(x1?i*h)其中h?n2i?1操作步骤: 一,构造类对象

1,根据题意,确定类的成员变量(求解问题要的所有变量(本例中问题为求定积分):定积分的区间端点x1,x2,曲线函数f()的系数a,b,c, 梯形法的等分数n及积分值s等) 2,确定类的成员函数(包括所求解问题:本例中问题为求定积分,是一个成员函数,

integral()及其辅助函数,如求函数值f(float x),初始化成员变量的曲线构造函数CURV

E或定积分赋值函数set(),结果的输出函数print()等)

二,编写主函数

主函数中定义类对象(含构造函数的调用),对象调用其成员函数求解,调用成员函数输出所求解结果(如果求解成员函数本身有输出过程,则该步可省) 参考答案

第八次上次作业 接口包与异常与输入输出

实验目的:

掌握接口的声明与实现 掌握包的概念与包内类的导入

掌握异常的两种处理机制:try..catch..finally结构与throws和throw抛出异常

了解输入输出流的基本概念与使用

掌握标准输入输出流和文件流对象的概念与操作流程实验要求: 实验要求: 实验内容:

根据问题说明,把下列程序补充完整。

1,从键盘上输入10个整数,并放入一个一维数组中,然后将其前5个元素与

后5个元素对换,即:第1个与第10个元素互换,第2个元素与第9个元素互换??第5个元素与第6个元素互换。分别输出数组原来各元素的值和对换后各元素的值。

___________________/*导入“输入输出”包中所有类及方法*/ import java.lang.String.*;/*导入字符串处理包*/ public class StandardIn3 {

public static void main(String[] args) _________________

///*做一个“输入输出异常”抛出*/ {

InputStreamReader iin = ______________________ //从标准输入设备“键盘”生成字符输入流对象iin

BufferedReader bin = new BufferedReader(_________);

//由字符输入流对象生成缓冲输入流(或串输入流)对象bin int i,w; /*w开关量 和 中间量*/ int a[]=new int[10]; boolean b;

for(i=0;i<10;i++)

{ System.out.println(\输入第\个整数\ do{/*判断是否是空串 如 是则重新输入*/ w=1;

try{ /*建立一个异常捕获*/

a[i] = Integer.parseInt(bin.readLine());

/*Integer.parseInt(str)- str 转成 int整形; bin.readLine() - 从系统输入缓冲区读入字符流给buf缓冲区 并返回字符串 */

}

__________________/*捕获“输入数据格式”异常*/ {

System.out.println(\数据输入错误请重新输入\处理异常*/ w = 0; }

}while(w==0); }

System.out.println(\您输入的数组是:\ for(i=0; i<10; i++)/*输出原数组*/ {

System.out.print(a[i]+\ }

for(i=0; i<5; i++)/*对换*/ {

w = a[i];

a[i] = a[9-i]; a[9-i] = w; }

System.out.println(\对换后的数组是:\ for(i=0; i<10; i++)/*输出对换后数组*/ {

System.out.print(a[i]+\ }

System.out.println(); } }

程序运行结果:

2,P153第8题 import java.io.*;

public class P153_8 {

public static void main(String[] args) throws IOException{ String name,xuehao,temp; int score;

float average=0,max=0,min=0,n=0; InputStreamReader iin=new InputStreamReader(System.in); BufferedReader bin= new BufferedReader(iin);

FileWriter fout=new FileWriter(new File(\ BufferedWriter bfout=new BufferedWriter(fout);

boolean endch=true;//输入是否结束开关:名字为空串时结束输入。 while(endch)

{ System.out.println(\ name=bin.readLine();

if(_______________) //名字为空串时结束输入。

{endch=false;continue;}

System.out.println(\ xuehao=bin.readLine();

System.out.println(\

score=Integer.parseInt(bin.readLine());

if(score<0||score>100) //抛出非法参数错误,提示“score data error” __________________________________

bfout.write(name); bfout.newLine(); bfout.write(xuehao); bfout.newLine();

bfout.write(String.valueOf(score)); bfout.newLine(); }

bfout.close();

FileReader fin=new FileReader(new File(\ BufferedReader bfin=new BufferedReader(fin); System.out.println(\ temp=bfin.readLine();

while(__________________) //读取字符串指针为空null时,结束文件读取 { System.out.print(\ temp=bfin.readLine();

System.out.print(\ temp=bfin.readLine();

System.out.println(\ average+=Integer.parseInt(temp); n++;

______________________ //读入下一行字符串 }

bfin.close();

average/=n;

System.out.println(\ } }

程序运行结果:

文本文件名称:

文本文件内容(用记事本打开,用图片粘贴):

参考答案:

import java.io.*; throws IOException

temp!=null

name.compareTo(\

new InputStreamReader(System.in); iin

catch (NumberFormatException e)

temp=bfin.readLine();

throw new IllegalArgumentException(\

第九次上次作业 图形用户界面

实验目的:

了解AWT的概念,掌握其初步使用

掌握三种布局管理的异同及使用条件(或场合)

掌握基于Windows编程的程序的运行机制:事件驱动。

掌握Java的事件驱动实现机制与实现流程 实验要求: 实验内容:

1,请设计一个如下图的GUI,不必实作事件接口。

import java.awt.*;

public class document extends Frame {

document() {

setLayout(new BorderLayout());/*窗口布局*/ Panel pan1 = new Panel();/*容器*/

pan1.setLayout(new GridLayout(3,1,0,5));/*容器布局*/ Panel pan2 = new Panel();/*容器*/

pan2.setLayout(new FlowLayout());/*容器布局*/ Panel pan3 = new Panel();/*容器*/

pan3.setLayout(new FlowLayout());/*容器布局*/ Button but1 = new Button(\检查\按钮*/ Button but2 = new Button(\搜索\ Button but3 = new Button(\选项\ Button but4 = new Button(\存档\ Button but5 = new Button(\取消\ Button but6 = new Button(\求助\

Label lab = new Label(\输入文字\标签*/ TextArea ta = new TextArea();/*文本框*/ pan1.add(but1);/*加载到容器1*/ pan1.add(but2); pan1.add(but3);

pan2.add(but4);/*加载到容器2*/ pan2.add(but5); pan2.add(but6);

pan3.add(lab);/*加载到容器3*/

add(pan1,\加载到窗口 布局位置*/ add(pan2,\ add(pan3,\ add(ta,\

setSize(300,150);/*窗口大小*/ setVisible(true);

}

public static void main(String[] args) { document doc=new document(); // TODO, add your application code //System.out.println(\ } } 或者:

import java.awt.*; public class document

{ public static void main(String[] args) {

Frame fr=new Frame();

fr.setLayout(new BorderLayout());/*窗口布局*/ Panel pan1 = new Panel();/*容器*/

pan1.setLayout(new GridLayout(3,1,0,5));/*容器布局*/ Panel pan2 = new Panel();/*容器*/

pan2.setLayout(new FlowLayout());/*容器布局*/ Panel pan3 = new Panel();/*容器*/

pan3.setLayout(new FlowLayout());/*容器布局*/ Button but1 = new Button(\检查\按钮*/ Button but2 = new Button(\搜索\ Button but3 = new Button(\选项\ Button but4 = new Button(\存档\ Button but5 = new Button(\取消\ Button but6 = new Button(\求助\

Label lab = new Label(\输入文字\标签*/ TextArea ta = new TextArea();/*文本框*/ pan1.add(but1);/*加载到容器1*/ pan1.add(but2); pan1.add(but3);

pan2.add(but4);/*加载到容器2*/ pan2.add(but5); pan2.add(but6);

pan3.add(lab);/*加载到容器3*/

fr.add(pan1,\加载到窗口 布局位置*/ fr.add(pan2,\

fr.add(pan3,\ fr.add(ta,\

fr.setSize(300,150);/*窗口大小*/ fr.setVisible(true); } }

2,请设计一个如下图的GUI,不必实作事件接口。

import java.awt.*;

public class computer extends Frame{ computer() {

setLayout(new GridLayout(4,4,10,10));/*定义布局 4行4列 x 10 y 10*/

Button[] but = new Button[16];/*定义16个按钮*/ for(int i=0; i<10; i++) {

but[i] = new Button(Integer.toString(i));/*建立按钮*/ }

but[10] = new Button(\建立按钮*/ but[11] = new Button(\ but[12] = new Button(\ but[13] = new Button(\ but[14] = new Button(\ but[15] = new Button(\ add(but[7]);/*加载到窗体*/ add(but[8]); add(but[9]); add(but[10]); add(but[4]); add(but[5]); add(but[6]); add(but[11]);

add(but[1]); add(but[2]); add(but[3]); add(but[12]); add(but[0]); add(but[15]); add(but[14]); add(but[13]);

setSize(300,150);/*窗口大小*/ setVisible(true);

}

public static void main(String[] args) { computer doc=new computer(); // TODO, add your application code //System.out.println(\ } }

3,一个能进行加法运算的简单计算器 程序如下:

import java.awt.*;

import java.awt.event.*;

public class add extends Frame implements ActionListener {

Label label1 = new Label(\ //Label label2 = new Label(\ TextField field1 = new TextField(6); TextField field2 = new TextField(6); TextField field3 = new TextField(6); Button button1 = new Button(\ Panel panel=new Panel(); add() { //初始化

setTitle(\简单加法运算\

setLayout(new BorderLayout(50,50)); panel.setLayout(new FlowLayout()); panel.add(field1); panel.add(label1);

panel.add(field2); panel.add(button1); panel.add(field3);

Label lb=new Label(\这是一个简单加法计算器\ add(lb,BorderLayout.NORTH); add(panel,BorderLayout.CENTER);

button1.addActionListener(this);//实现了动作接口: //implements ActionListener当前窗口:this做为按钮的事件监听器,动作//接口只有一个方法:actionPerformed()查帮助文档action可知。 setSize(400,600); setVisible(true); }

public static void main(String[] args) { add addcomputer=new add();

addcomputer.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});

//主窗口增加窗口监听器,可以是实现了接口的任意对象如:new //WindowAdapter(),并实现了接口的相应消息处理方法如windowClosing。 }

public void actionPerformed(ActionEvent e) //实现接口的完成动作消息处//理方法:actionPerformed,注意:参数必须有事件:ActionEvent 和 事件对//象e { int x = Integer.parseInt(field1.getText()) + Integer.parseInt(field2.getText()); field3.setText(Integer.toString(x)); } }

第十次上次作业 swing组件

实验目的:

掌握swing各组件的基本概念,功能与使用方法。 掌握窗口,标签,按钮,编辑组件,列表与组合框各组件在awt和swing中的不同 掌握窗口,标签,按钮,编辑组件,列表与组合框各组件的正确使用 掌握菜单的功能与实现 实验要求: 实验内容:

1, 请编程实现下面的功能。

import java.awt.*;

import java.awt.event.*;/*事件监听器所在包*/ public class menu {

public static void main(String[] args) {

Frame f=new Frame(\建立窗口 窗口标题*/ f.setSize(300,250);/*窗口大小*/

f.addWindowListener(new WindowAdapter() /*窗口事件监听器*/ {

public void windowClosing(WindowEvent e) /*窗口关闭按钮*/ {

System.exit(0);/*退出程序*/ } });

MenuBar mb=new MenuBar();/*定义一个菜单容器*/ Menu m1=new Menu(\定一个菜单项*/

Menu m2=new Menu(\另一个菜单项 作为级联菜单项*/ MenuItem mi1=new MenuItem(\定义菜单功能项*/ MenuItem mi2=new MenuItem(\ MenuItem mi3=new MenuItem(\

MenuShortcut ms4 = new MenuShortcut(KeyEvent.VK_X); /*定义快捷键*/ MenuItem mi4=new MenuItem(\定义菜单功能项并附加快捷键*/

MenuItem mi5=new MenuItem(\

CheckboxMenuItem mi6=new CheckboxMenuItem(\定义带复选框的菜单功能项*/

MenuItem mi7=new MenuItem(\

/*

菜单中exit 的事件监听 */

mi7.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

System.exit(0);/*退出程序*/ } });

m2.add(mi1);/*挂载到级联菜单*/ m2.add(mi2);

m1.add(m2);/*级联菜单挂载到菜单项*/ m1.add(mi3);/*功能项加载到菜单项*/ m1.add(mi4); m1.add(mi5); m1.add(mi6); m1.add(mi7);

mb.add(m1);/*菜单项加载到菜单容器*/

f.setMenuBar(mb);/*菜单容器挂载到窗体*/ f.show();/*显示窗体*/ } }

2,编写一个简单的文本编辑器,含有三个菜单,FILE,EDIT,HELP,含有三个工具条,打开、新建和储存。

修改意见:利用第10章文件操作,为菜单项添加事件监听器,并实现接口,以完成菜单的相应功能。类似于WINDOW的“记事本”程序 源程序代码:

import java.awt.*;

import java.awt.event.*;/*事件监听器所在包*/ public class notpad {

public static void main(String[] args) {

Frame f=new Frame(\文本编辑器\建立窗口 窗口标题*/ f.setSize(700,550);/*窗口大小*/

f.addWindowListener(new WindowAdapter() /*窗口事件监听器*/ {

public void windowClosing(WindowEvent e) /*窗口关闭按钮*/ {

System.exit(0);/*退出程序*/ } });

MenuBar mb=new MenuBar();/*定义一个菜单容器*/ Menu m1=new Menu(\定一个菜单项*/

Menu m2=new Menu(\另一个菜单项 作为级联菜单项*/ Menu m3=new Menu(\

MenuItem mi1=new MenuItem(\新建\定义菜单功能项*/ MenuItem mi2=new MenuItem(\打开\ MenuItem mi3=new MenuItem(\存储\ MenuItem mi4=new MenuItem(\ MenuItem mi5=new MenuItem(\退出\

MenuItem mi6=new MenuItem(\粘贴\定义菜单功能项并附加快捷键*/ MenuItem mi7=new MenuItem(\剪切\ MenuItem mi8=new MenuItem(\拷贝\ MenuItem mi9=new MenuItem(\帮助主题\ MenuItem mi10=new MenuItem(\ MenuItem mi11=new MenuItem(\关于\ /*

菜单中退出 的事件监听 */

mi5.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

System.exit(0);/*退出程序*/ } });

m1.add(mi1); m1.add(mi2); m1.add(mi3); m1.add(mi4);

m1.add(mi5); m2.add(mi6); m2.add(mi7); m2.add(mi8); m3.add(mi9); m3.add(mi10); m3.add(mi11);

mb.add(m1);/*菜单项加载到菜单容器*/ mb.add(m2); mb.add(m3);

f.setMenuBar(mb);/*菜单容器挂载到窗体*/ Button but1 = new Button(\新建\ Button but2 = new Button(\打开\ Button but3 = new Button(\存储\ Panel pa = new Panel();

pa.setLayout(new FlowLayout(FlowLayout.LEFT)); pa.add(but1); pa.add(but2); pa.add(but3);

pa.setBackground(Color.gray); f.add(pa,\

TextArea ta = new TextArea(); f.add(ta,\

f.show();/*显示窗体*/ } }

3,综合应用:

编写一个程序实现一个仿真计算器。包括十个数字按钮(0~9)和四个运算符(加减、乘、除),以及等号,小数点和清零两个辅助按钮,还有一个显示输入和输出的文本框。试分别用BorderLayout和 GridLayout实现。 修改意见:用一真实计算界面来设计。

import java.awt.*;

import java.awt.event.*; import javax.swing.*;

import javax.swing.event.*;

public class test_computer extends JFrame /*继承小程序类 实现 ActionListener接口*/ {

double su1; double su2;

int cmpch; //0,1,2,3: +,-,*,/ JTextField jtf = new JTextField();

JButton[] but = new JButton[17];/*定义16个按钮*/ Panel pan = new Panel(); Panel pan2 = new Panel();

JLabel lab = new JLabel(\制作: 耀良\ test_computer () {

setLayout(new BorderLayout(2,2));/*BorderLayout布局*/ jtf.setHorizontalAlignment(JTextField.CENTER); jtf.setEditable(false);

pan.setLayout(new GridLayout(4,4,10,10));/*GridLayout布局 定义布局 4行4列 x 10 y 10*/

pan2.setLayout(new BorderLayout(2,2)); for(int i=0; i<10; i++) {

but[i] = new JButton(Integer.toString(i));/*建立按钮*/ but[i].addActionListener(new digitalhd());/*建立监听*/ }

but[10] = new JButton(\

but[10].addActionListener(new digitalhd());/*建立监听*/

but[11] = new JButton(\建立按钮*/ but[12] = new JButton(\ but[13] = new JButton(\ but[14] = new JButton(\

for(int i=11; i<15; i++) {

but[i].addActionListener(new computerhd());/*建立监听*/ }

but[15] = new JButton(\ but[16] = new JButton(\清空\

but[15].addActionListener(new elsehd()); but[16].addActionListener(new elsehd()); pan.add(but[7]);/*加载到窗体*/

pan.add(but[8]); pan.add(but[9]); pan.add(but[10]); pan.add(but[4]); pan.add(but[5]); pan.add(but[6]); pan.add(but[11]); pan.add(but[1]); pan.add(but[2]); pan.add(but[3]); pan.add(but[12]); pan.add(but[0]); pan.add(but[15]); pan.add(but[14]); pan.add(but[13]);

pan2.add(lab,\ pan2.add(but[16],\ add(jtf,\ add(pan,\ add(pan2,\

lab.setForeground(Color.blue); lab.setText(\制作: 老岩\

setSize(300,200);/*窗口大小*/ setVisible(true);

setDefaultCloseOperation(EXIT_ON_CLOSE); }

public static void main(String[] args) { JFrame jf=new test_computer(); }

class digitalhd implements ActionListener { public void actionPerformed(ActionEvent e) { String dig=jtf.getText(); if(e.getSource()==but[10]) dig=dig+\ else for(int i=0;i<10;i++) if(e.getSource()==but[i]) dig+=String.valueOf(i);

try{ Double dd=Double.parseDouble(dig); }

catch(NumberFormatException nfe){ dig=jtf.getText(); }

jtf.setText(dig); } }

class computerhd implements ActionListener { public void actionPerformed(ActionEvent e) { su1=Double.parseDouble(jtf.getText()); jtf.setText(\

for(int i=11;i<15;i++)

if(e.getSource()==but[i]) cmpch=i-11; } }

class elsehd implements ActionListener

{ public void actionPerformed(ActionEvent e) { String str=\ //jtf.setText(\

if(e.getSource()==but[15]) {

su2=Double.parseDouble(jtf.getText());

switch(cmpch)

{case 0: str=String.valueOf(su1+su2);su1=su1+su2;break; case 1: str=String.valueOf(su1-su2);su1=su1-su2;break; case 2: str=String.valueOf(su1*su2);su1=su1*su2;break; case 3: str=String.valueOf(su1/su2);su1=su1/su2;break; //“su1=”用于实现连续运算:1+2+3+4 }

jtf.setText(str); } else

{su1=0;su2=0;digital=-1; jtf.setText(\ } } } }

第十一次上次作业 Applet程序

实验目的:

操作步骤:

1, 在集成开发环境下创建基于applet小程序,建立如下源程序文件,编译好后,把img

目录夹(含图像文件:自己选定的其它图像文件也行,img文件夹下要有:一个大图像,九个小图像)复制到编译好的字节码文件class所在目录。 2, 运行程序。 源程序代码:

import java.applet.*; import java.awt.*;

import java.awt.event.*; import java.net.*;

public class pintu extends Applet implements MouseListener,KeyListener,Runnable {

Image[] m_Image=new Image[9]; //9个用来装入每个拼图的图片对象 Image m_ImgAll; //总的大图片

int m_nImageNo[][]=new int[3][3]; ////标志现在各个拼图的排列情况

final int NO_IMAGE=-1; //此位置没有拼图

final int IMAGE_WIDTH=120;

//每张拼图的宽

final int IMAGE_HEIGHT=120; ////每张拼图的高

final int DIRECTION_UP=1; final int DIRECTION_DOWN=2; final int DIRECTION_LEFT=3; final int DIRECTION_RIGHT=4; final int DIRECTION_NONE=-1;

final int DELTAX=120; //标志提示信息区的宽度

boolean bWantStartNewGame=false; //游戏是否结束,是否需要开始新游戏 int nStep=0; //已经走的步数 int nTime=0;

//已经玩过的时间,以秒为单位 Thread thTimer; //计时器线程 int nScore=0; //玩家所得的分数 int m_nNumOfImg=0;

//拼图底图所使用的图片的个数

String m_sImgName[]=new String[9]; //记录拼图底图的名字

boolean bOnShowAll=false; //预览的开关

AudioClip m_audioClip1,m_audioClip2; //装载要播放的声音对象 public void init() {

String param=getParameter(\ try {

m_nNumOfImg=Integer.parseInt(param); }

catch(Exception e) {

m_nNumOfImg=1;

System.out.println(\ }

for(int i=0;i

m_sImgName[i]=getParameter(\

System.out.println(m_sImgName[i]);

if(m_sImgName[i]==null)m_sImgName[i]=\ }

System.out.println(param);

MediaTracker mediaTracker=new MediaTracker(this); //建立一个监视器 // for(int i=0;i<9;i++) // {

// int nTemp=i+1;

// m_Image[i]=getImage(getDocumentBase(),\ m_ImgAll=getImage(getDocumentBase(),\ //装载总的大图片

// m_Image[i]=getImage(getDocumentBase(),\// mediaTracker.addImage(m_Image[i],i); mediaTracker.addImage(m_ImgAll,1); // } try {

mediaTracker.waitForID(1); }

catch(Exception e) {

System.out.println(\图片装载出错\ }

if(mediaTracker.isErrorAny())System.out.println(\图片装载出错\ for(int i=0;i<9;i++) {

m_Image[i]=createImage(IMAGE_WIDTH,IMAGE_HEIGHT); Graphics g=m_Image[i].getGraphics(); int nRow=i%3; int nCol=i/3;

g.drawImage(m_ImgAll,0,0,IMAGE_WIDTH,IMAGE_HEIGHT,nRow*IMAGE_WIDTH,nCol*IMAGE_HEIGHT,(nRow+1)*IMAGE_WIDTH,(nCol+1)*IMAGE_HEIGHT,this); System.out.println(\

// m_ImgAll.getGraphics().clipRect(1,1,120,120); // g.copyArea(1,1,120,120,0,0); }

System.out.println(\ thTimer=new Thread(this); //为线程分配内存空间 thTimer.start(); //开始线程 initData();

m_audioClip1=getAudioClip(getCodeBase(),\ m_audioClip2=getAudioClip(getCodeBase(),\ addMouseListener(this); addKeyListener(this); }

public void initImageAgain(int nImgNo) {

//nImgNo为要装载的图像是第几个图像。 if(nImgNo>m_nNumOfImg) {

showStatus(\你要的图片不存在!!\ return; }

// System.out.println(param);

MediaTracker mediaTracker=new MediaTracker(this); //建立一个监视器 // for(int i=0;i<9;i++) // {

// int nTemp=i+1;

// m_Image[i]=getImage(getDocumentBase(),\

m_ImgAll=getImage(getDocumentBase(),\ //装载总的大图片

// m_Image[i]=getImage(getDocumentBase(),\// mediaTracker.addImage(m_Image[i],i); mediaTracker.addImage(m_ImgAll,1); // } try {

mediaTracker.waitForAll(); }

catch(Exception e) {

System.out.println(\图片装载出错\ }

for(int i=0;i<9;i++) {

m_Image[i]=createImage(IMAGE_WIDTH,IMAGE_HEIGHT); Graphics g=m_Image[i].getGraphics(); int nRow=i%3; int nCol=i/3;

g.drawImage(m_ImgAll,0,0,IMAGE_WIDTH,IMAGE_HEIGHT,nRow*IMAGE_WIDTH,nCol*IMAGE_HEIGHT,(nRow+1)*IMAGE_WIDTH,(nCol+1)*IMAGE_HEIGHT,this); System.out.println(\

// m_ImgAll.getGraphics().clipRect(1,1,120,120); // g.copyArea(1,1,120,120,0,0); } }

public void update(Graphics g) {

paint(g); }

public void paint(Graphics g) {

g.setColor(Color.white); //将当前颜色变为白色

g.fillRect(0,0,DELTAX,IMAGE_HEIGHT*3); //填充左边的提示信息区域

g.setFont(new Font(\宋体\ //设置字体

g.setColor(Color.blue); //设置颜色

g.drawString(\步数:\

g.drawString(\现有图片\张\

g.drawString(\请按1-\键改变图片\ //在坐标(10,20)画出字串,来显示现在走了多少步。 g.setColor(Color.white); if(bOnShowAll) {

int x=DELTAX; int y=0;

g.drawImage(m_ImgAll,x,y,this); return; }

for(int i=0;i<3;i++) {

for(int j=0;j<3;j++) {

int x=i*IMAGE_WIDTH+DELTAX; int y=j*IMAGE_HEIGHT;

if(m_nImageNo[i][j]==NO_IMAGE)

g.fill3DRect(x,y,IMAGE_WIDTH,IMAGE_HEIGHT,true); else {

g.drawImage(m_Image[m_nImageNo[i][j]],x,y,this); g.drawRect(x,y,IMAGE_WIDTH,IMAGE_HEIGHT); }

本文来源:https://www.bwwdw.com/article/rc4.html

Top