资源描述
实训汇报书
实训名称: Java程序设计实训
系 (部): 信息工程系
专业班级:
学生姓名:
学 号:
指导老师: 张民
完成日期: .12.11
山东科技大学泰山科技学院
实训课题
文本编辑器
实训人姓名
同组人员
实训日期
.12.07至.12.11
实训成绩
指导老师评语
指导老师署名:______________
_______年 ____ 月____日
……………………………装……………………………………订…………………………………线……………………………
目 录
目 录 1
1 实训目标 2
1.1 实训目标 2
1.2实训要求 2
2 文本编辑器系统分析和设计 2
2.1 系统功效描述 2
2.2 系统模块设计 2
2.3 数据库结构设计 3
3 关键代码清单 4
3.1生成菜单栏及菜单项 4
3.2监听事件处理 5
4 程序运行和测试 6
4.1文本区功效测试 6
4.2文件菜单功效测试 6
4.3编辑菜单功效测试 7
4.4工具菜单功效测试 11
5 实训总结 14
文本编辑器设计和实现
1 实训目标
1.1 实训目标
《Java程序设计实训》是计算机专业一门关键专业技术基础实践课程。为了能够很好完成实训任务,学生应含有软件开发技术基础知识,实训关键目标在于将理论和实际应用相结合,使用程序设计语言java,和相关软件设计开发知识完成软件设计开发任务。本实训课程将为整个专业学习和软件设计水平提升打下良好基础,提升学生项目分析、设计、编写、调试和测试能力,并培养基础、良好团体合作能力。
1.2实训要求
实训中要求综合利用所学知识,上机处理部分和实际应用结合紧密、规模较大问题,经过分析、设计、编码、调试等各步骤训练,使学生深刻了解、牢靠掌握软件开发技术,提升分析、处理实际问题能力
此次实训要求在学生能够较熟练使用java程序设计语言进行软件代码编写,同时还要含有很好项目分析能力,加深对相关课程基础内容了解。同时,在程序设计方法和上机操作等基础技能和科学作风方面受到比较系统和严格训练。
2 文本编辑器系统分析和设计
2.1 系统功效描述
经过此系统能够实现以下功效:
1)可进行文件新建、打开、保留、编辑等基础功效。
2)支持复制、剪切和粘贴操作
3)可进行查找和替换操作
2.2 系统模块设计
依据系统自带文档编辑器特征设计,包含以下功效模块:
一、 整体结构框架包含:菜单栏和文档编辑区
二、 每个框架分别包含不一样子框架,各个模块具体框架:
Ø 菜单栏:文件、编辑、工具
Ø 菜单栏中各个子菜单功效
文件:新建、打开、保留、另存为、退出
编辑:剪切、复制、粘贴
工具: 查找、替换
Ø 子菜单功效实现关键多个功效介绍
1) 打开和另存为:两个窗体调用系统函数直接利用,注意格式选择
2) 查找:查找内容、查找、查找下一个
Ø 文本编辑区
监视文本内容是否改变、监听光标所在位置
2.3 数据库结构设计
1.程序E-R图
菜单栏
文件
编辑
工具
文件
新建
打开
保留
另存为
退出
编辑
剪切
复制
粘贴
工具
查找
替换
3 关键代码清单
3.1生成菜单栏及菜单项
public void addmyMenu() // 菜单函数,生成菜单
{
JMenuBar menubar = new JMenuBar();// 菜单栏添加若干菜单
this.setJMenuBar(menubar);
String menustr[] = { "文件", "编辑", "工具", "帮助" };//菜单栏字符串数组
JMenu menu[] = new JMenu[menustr.length];
for (int i = 0; i < menu.length; i++) {//为菜单栏赋值
menu[i] = new JMenu(menustr[i]);
menubar.add(menu[i]);
}
String menuitemstr0[] = { "新建", "打开", "保留", "另存为", "退出" };// 文件菜单中添加若干菜单项
JMenuItem menuitem0[] = new JMenuItem[menuitemstr0.length];
for (int i = 0; i < menuitem0.length; i++) {//为文件菜单赋值
menuitem0[i] = new JMenuItem(menuitemstr0[i]);
menu[0].add(menuitem0[i]);
menuitem0[i].addActionListener(this);// 为每个菜单项注册监听事件
}
String menuitemstr1[] = { "剪切", "复制", "粘贴" };// 编辑菜单中添加若干菜单项
JMenuItem menuitem1[] = new JMenuItem[menuitemstr1.length];
for (int i = 0; i < menuitem1.length; i++) {
menuitem1[i] = new JMenuItem(menuitemstr1[i]);
menu[1].add(menuitem1[i]);
menuitem1[i].addActionListener(this);// 为每个菜单项注册监听事件
}
String menuitemstr2[] = { "查找", "替换" };// 工具菜单中添加若干菜单项
JMenuItem menuitem2[] = new JMenuItem[menuitemstr2.length];
for (int i = 0; i < menuitem2.length; i++) {
menuitem2[i] = new JMenuItem(menuitemstr2[i]);
menu[2].add(menuitem2[i]);
menuitem2[i].addActionListener(this);// 为每个菜单项注册监听事件
}
JMenuItem menuitemstr3 = new JMenuItem("帮助");// 帮助菜单中添加帮助菜单项
menu[3].add(menuitemstr3);
menuitemstr3.addActionListener(this);// 注册监听事件
}
3.2监听事件处理
注册监听事件,当进行操作时,监听事件活得事件源并选择对应操作,对不一样事件调用不一样函数,得到文本操作不一样结果。
class MyItemListener_font implements ItemListener { //字体监听器
public void itemStateChanged(ItemEvent e) {
id_font = ((java.awt.List)e.getSource()).getSelectedIndex();
switch( id_font){
case 0:{
ta.setFont(new Font("Times New Roman",Font.PLAIN ,ta.getFont().getSize()) );//一般文字
break;}
case 1:{
ta.setFont(new Font("Times New Roman" , Font.BOLD ,ta.getFont().getSize()) );//粗体文字
break;
}
case 2:{
ta.setFont(new Font("Times New Roman" , Font.ITALIC ,ta.getFont().getSize()) );//斜体文字
break;
}}}}
4 程序运行和测试
4.1文本区功效测试
a) 字体显示,开始时候不做任何操作时候显示默认值,经过修改字体属性来修改字体。
b) 对文本事件进行监听,假如文本编辑窗口中假如有事件触发,关闭时能够有必需信息提醒。
c) 状态栏能够正常显示文本状态信息。
4.2文件菜单功效测试
文件中功效测试:
a) 经过文件字符流读取文件,创建缓冲区存放文件流。
b) 当保留文件时,先判定文件是否未被保留过,假如未被保留过,则创建新文件并经过输出流来存放文件,当文件已经保留过再对文件进行修改时,则会提醒保留消息窗体。
c) 另存为是经过不一样方法来创建一个新文件。
附:
打开和保留代码:
miSave.addActionListener( new ActionListener(){
public void actionPerformed(ActionEvent e) {
if( fileName.equals("") ){ //假如文件没有被保留过,即文件名为空
FileDialog d=new FileDialog(mainFrame , "save file" , FileDialog.SAVE );//保留文件对话框
d.addWindowListener( new WindowAdapter(){ //关闭文件对话框窗口
public void windowClosing(WindowEvent ee){
System.exit(0);
}
});
d.setVisible(true);
String s = ta.getText();//得到所输入文本内容
try//异常处理
{
File f = new File( d.getDirectory()+d.getFile());//新建文件
fileName = d.getDirectory()+d.getFile();//得到文件名
BufferedWriter bw = new BufferedWriter( new FileWriter (f));//输入到文件中
bw.write(s , 0 , s.length());
bw.close();
}
catch(FileNotFoundException fe_){
System.out.println("file not found");
System.exit(0);
}
catch( IOException ie_)
{
System.out.println(" IO error");
System.exit(0);
}
}
else //假如文件已经保留过
{
String s = ta.getText();//得到所输入文本内容
try//异常处理
{
File f = new File( fileName );//新建文件
BufferedWriter bw = new BufferedWriter( new FileWriter (f));//输入到文件中
bw.write(s , 0 , s.length());
bw.close();
}
catch(FileNotFoundException fe_){
System.out.println("file not found");
System.exit(0);
}
catch( IOException ie_)
{
System.out.println(" IO error");
System.exit(0);
}
}
});
//另存为
miSaveAs.addActionListener( new ActionListener(){
public void actionPerformed(ActionEvent e) {
FileDialog d=new FileDialog(mainFrame , "save file" , FileDialog.SAVE );//保留文件对话框
d.addWindowListener( new WindowAdapter(){ //关闭文件对话框窗口
public void windowClosing(WindowEvent ee){
System.exit(0);
}
});
d.setVisible(true);
String s = ta.getText();//得到所输入文本内容
try//异常处理
{
File f = new File( d.getDirectory()+d.getFile());//新建文件
BufferedWriter bw = new BufferedWriter( new FileWriter (f));//输入到文件中
bw.write(s , 0 , s.length());
bw.close();
}
catch(FileNotFoundException fe_){
System.out.println("file not found");
System.exit(0);
}
catch( IOException ie_)
{
System.out.println(" IO error");
System.exit(0);
} }});
4.3编辑菜单功效测试
复制前 粘贴后
剪切前 剪切后
剪切、复制、粘贴功效实现是在注册监听事件后,对文本去文字进行操作时,系统调用文本类本身库函数来处理文本去文字操作,将选中文本读入缓冲区。然后再等候不一样操作方法调用。
附录:
miCut.addActionListener( new ActionListener(){
public void actionPerformed(ActionEvent e){
tempString = ta.getSelectedText(); ///得到要复制内容,暂存在tempString中
StringBuffer tmp = new StringBuffer ( ta.getText());//临时存放文本
int start = ta.getSelectionStart(); //得到要删除字符串起始位置
int len = ta.getSelectedText().length(); //得到要删除字符串长度
tmp.delete( start , start+len); ///删除所选中字符串
ta.setText(tmp.toString());//用新文本设置原文本
}
});
//复制
miCopy.addActionListener( new ActionListener(){
public void actionPerformed(ActionEvent e){
tempString = ta.getSelectedText(); ///得到要复制内容,暂存在tempString中
}
})
//粘贴
miPaste.addActionListener( new ActionListener(){
public void actionPerformed(ActionEvent e){
StringBuffer tmp = new StringBuffer ( ta.getText());//临时存放文本
int start = ta.getSelectionStart(); //得到要粘贴位置
tmp.insert(start , tempString);//查入要粘贴内容
ta.setText(tmp.toString());//用新文本设置原文本
}
});
//删除
miDelete.addActionListener( new ActionListener(){
public void actionPerformed(ActionEvent e){
StringBuffer tmp = new StringBuffer ( ta.getText());//临时存放文本
int start = ta.getSelectionStart(); //得到要删除字符串起始位置
int len = ta.getSelectedText().length(); //得到要删除字符串长度
tmp.delete( start , start+len); ///删除所选中字符串
ta.setText(tmp.toString());//用新文本设置原文本
}
});
4.4工具菜单功效测试
功效描述:
查找需要先生成对应窗体,使用对应组件类来创建窗体,使用流布局管理器来对窗体中各个控件进行布局,对查找和查找下一个按钮注册监听事件并编写对应处理方法。文本去文字使用对应处理方法进行比较和处理,并对光标位置进行判定是否到文本末尾,使用异常处理语句捕捉异常并处理。
功效描述:
替换也是需要先生成对应窗体,使用对应组件类来创建窗体,使用流布局管理器来对窗体中各个控件进行布局,对替换和清空按钮注册监听事件并编写对应处理方法。
附:
查找替换函数处理代码:
public void find()// 查找函数
{
find.setSize(300, 100);
find.setLocation(this.getX()+50, this.getY()+50);
find.setResizable(false);
find.setLayout(new FlowLayout());//窗体流布局
Label label1 = new Label("查找内容");
Button button1 = new Button("查找");
Button button2 = new Button("查找下一个");
find.add(label1);
find.add(ltext1);
find.add(button1);
find.add(button2);
//注册按钮监听事件
button1.addActionListener(new ActionListener() {//查找按钮事件方法
public void actionPerformed(ActionEvent e) {
if (ltext1.getText() == "")
;
else {
int locate = text.getText().indexOf(ltext1.getText(), 0);
text.select(locate, locate + ltext1.getText().length());
fromindex = locate + ltext1.getText().length();
}
}
});
button2.addActionListener(new ActionListener() {//查找下一个按钮方法
public void actionPerformed(ActionEvent e) {
int locate = text.getText()
.indexOf(ltext1.getText(), fromindex);
if (locate == -1)
ltext1.setText("已查找到文件末尾!");
else {
text.select(locate, locate + ltext1.getText().length());
fromindex = locate + ltext1.getText().length();
}
}
});
find.addWindowListener(new WindowAdapter() { // 关闭对话框窗口
public void windowClosing(WindowEvent ee) {
find.dispose();
}
});
find.show();
find.removeAll();
}
public void replace()// 替换函数
{
replace.setSize(200, 200);
replace.setLocation(this.getX()+50, this.getY()+50);
replace.setResizable(false);
replace.setLayout(new FlowLayout());
Label label_1 = new Label(" 查找内容");
Label label_2 = new Label(" 替换为 ");
Button button_1 = new Button(" 替换 ");
Button button_2 = new Button(" 清空 ");
replace.add(label_1);
replace.add(ltext2);
replace.add(label_2);
replace.add(ltext3);
replace.add(button_1);
replace.add(button_2);
//注册按钮监听事件
button_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (ltext2.getText() == "")
;
else {
int locate = text.getText().indexOf(ltext2.getText(), 0);
text.select(locate, locate + ltext2.getText().length());
text.replaceRange(ltext3.getText(), locate, locate
+ ltext2.getText().length());
}
}
});
button_2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
ltext2.setText("");
ltext3.setText("");
}
});
replace.addWindowListener(new WindowAdapter() { // 关闭对话框窗口
public void windowClosing(WindowEvent ee) {
replace.dispose();
}
});
replace.show();
replace.removeAll();
}
5 实训总结
实训很快就结束了,当你认真去完成一件事时候,你就会发觉时间过很快。有些问题还没处理,有些知识还没有弄懂那个,时间短任务重。此次实训老师给出了三个题目,因为任务中,我们选择了其中一个项目,文本编辑器。以前在.net中做过实训,跟java一样需要用代码来实现窗体实例化和调用。经过代码来实例化和创建窗体,并经过代码来调用,引入了java中多个类来实现各个窗体和控件,认为很简单,不过实际做出来还是有很多不一样。
在窗体中需要加入文本编辑区来存放文本,这就需要创建文本对象并对其进行实例化,而且在编辑菜单中还需要多个方法来实现对文本操作和处理,比如剪切和复制,用到本身函数来操作。对于全部菜单和菜单项和控件所做才操作处理全部需要注册其对应监听事件来完成,而在文件菜单中,打开操作用到了文件输入流,保留则用到了文本输出流。
实训结束了,我们还有很多功效没有实现,在已经实现功效中还有很多不完善地方。当然我想自己更多是兴奋和一点点成就感。现在我认为,学习JAVA要不停复习和利用,做到举一反三,将所学知识充足融入到平时学习生活中去,从而为以后工作打好坚实基础。感谢学校和老师能够为我们提供这次机会,让我们愈加好掌握和了解JAVA这门语言。经过这次实训,我真从中学到了很多东西。同学间相互帮助,能让你进度加倍。是兴奋和一点点成就感。现在我认为,学习JAVA要不停复习和利用,做到举一反三,将所学知识充足融入到平时学习生活中去,从而为以后工作打好坚实基础。感谢学校和老师能够为我们提供这次机会,让我们愈加好掌握和了解JAVA这门语言。 经过这次实训,我真从中学到了很多东西。我对这个介于人类和非人类之间计算机编程语言有了较上学期更深入认识。其间快乐过、郁闷过、无奈过、彷徨过……伴随实训圆满成功和试验汇报顺利完成,有点微微自豪感使人难忘。至于我做程序,还不是很完善,所以我将一直去完善它,不停地学习下去。伴伴随学习深入,我发觉高深东西还有很多很多,等候着我自己去发掘。
展开阅读全文