JAVA程序设计综合训练记事本.docx
《JAVA程序设计综合训练记事本.docx》由会员分享,可在线阅读,更多相关《JAVA程序设计综合训练记事本.docx(35页珍藏版)》请在冰豆网上搜索。
JAVA程序设计综合训练记事本
JAVA程序设计——记事本
一、引言
1.1项目的名称
系统WindowsXP中的记事本。
1.2项目背景和目标
目前,很多新的技术领域都涉及到了Java语言,Java语言是面向对象编程,并涉及到网络、多线程等重要的基础知识,Java的体系结构由Java语言、Javaclass、JavaAPI、Java虚拟机组成。
它具有简单、面向对象、健壮、安全、结构中立、可移植和高效能等众多优点。
Java支持多线程编程,Java运行时系统在多线程同步方面具有成熟的解决方案。
Java的平台标准有JavaME,JavaSE和JavaEE。
Java发展到今天,它的卓越成就及在业界的地位毋庸置疑。
目前在众多的支持Java的开发工具中主要的7有JavaDevelopmentKit,NetBeans,Jcreator,JBuilder,JDeveloper和Eclipse等。
以上的每种开发工具都有优缺点,对于我们来说,重要的是要根据自己需求来选择一种合适的开发工具。
在本程序设计中,因为需要设计的是记事本程序,规模较小,内容较少,所以选择了适合初学者使用的Eclipse开发工具。
为了配合这个Java程序设计课程,帮助我深入学习掌握Java语言,熟练运用这个工具而设立的设计。
通过课程设计各个项目的综合训练,加强我对JAVA语言的理解,检验我对专业理论知识理解与掌握的程度,锻炼我综合运用JAVA程序设计处理所学的知识实际分析问题、解决问题的能力,使课堂上的理论在实践中得到运用,提高我的综合素质,为我接下来的相关专业打好基础。
1.3顶目的可行性研究
基于上学期所学到的JAVA程序设计中的各章以及各节所涉及到的知识点,本程序在理论上书籍以及资料中完全可以完成。
二、需求分析
2.1系统概述
编写一个记事本程序,要求:
(1)用图形用户界面实现。
(2)能实现编辑、保存、另存为、查找替换等功能。
(3)执行这些操作后,可以退出关闭记事本。
2.2系统运行环境
1.硬件环境
处理器:
InterPentium166MX或更高
内存:
32M以上
硬盘空间:
1GB以上
显卡:
SVGA显示适配器
2.软件环境
操作系统:
WindowsXP
2.3功能需求描述
本程序构建的记事本程序参照了WindowsXP操作系统的记事本工具,其功能有以下几个方面:
(1)菜单中有“文件”,“编辑”,“格式”,“查看”,“帮助”五个主菜单。
(2)“文件”有“新建”“打开”“保存”……“退出”七个子菜单:
分别用于新建文件,打开文件,保存文件……退出记事本。
(3)“编辑”中有“撤消”“剪切”“复制”“粘贴”……“时间/日期”十一个字菜单:
用于撤消文字,剪切文字,复制文字,粘贴文字……子菜单来对文字进行设置。
(4)“格式”菜单中有自动换行和字体等信息。
(5)“查看”中有“状态栏”这个子菜单。
(6)“帮助”菜单中有“帮助主题”和“关于记事本”这两个子菜单。
三、总体设计
3.1开发与设计的总体思想
在本程序中,主要是设计菜单和添加事件监听器。
设计过程中申明了很多的包,用到了FileDialog,TextArea,Menu,MenuBar,MenuItem,JFrame,JButton,JLable,JFileChooser等。
Menu用来制作菜单,菜单包括“文件”“编辑”……。
MenuItem用来制作菜单项,菜单项包括“新建”,“打开”……。
JFrame主要用来创建对象。
为了用于对文件或目录进行浏览和选择的对话框的设置,所以运用了JFileChooser。
3.2系统模块结构图
3.3模块设计
菜单模块
该模块负责各菜单间以及子菜单的创建及功能实现。
3.4系统流程推述
四、详细设计
4.1主界面模块
申明文件所在包:
importjava.io.File;
importjava.io.FileReader;
importjava.io.IOException;
importjava.io.FileNotFoundException;
importjava.io.BufferedReader;
importjava.io.BufferedWriter;
importjava.io.FileWriter;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.awt.event.WindowAdapter;
importjava.awt.event.WindowEvent;
importjava.awt.FileDialog;
importjava.awt.TextArea;
importjava.awt.Toolkit;
importjava.awt.Window;
importjava.awt.event.KeyEvent;
importjava.awt.datatransfer.Clipboard;
importjava.awt.datatransfer.DataFlavor;
importjava.awt.datatransfer.StringSelection;
importjava.awt.datatransfer.Transferable;
importjava.awt.datatransfer.UnsupportedFlavorException;
importjava.awt.MenuShortcut;
importjava.awt.Menu;
importjava.awt.MenuBar;
importjava.awt.MenuItem;
importjavax.swing.JButton;
importjavax.swing.JDialog;
importjavax.swing.JFrame;
importjavax.swing.JLabel;
importjavax.swing.JTextField;
importjavax.swing.JFileChooser;
importjavax.swing.filechooser.FileNameExtensionFilter;
importjavax.swing.JOptionPane;
importjava.util.logging.Level;
importjava.util.logging.Logger;
主类的实现
1.构建具体实现记事本的类:
主要是给显式成员初始化(如果在成员说明中写有简单的赋值表达式,就可以在构造对象时进行显式的成员初始化。
)
PublicclassNoteBook{
privateTextAreacontent;
privateStringfilePath="";//先让路径为空
ToolkittoolKit=Toolkit.getDefaultToolkit();
Clipboardclipboard=toolKit.getSystemClipboard();
}
2.定义一个无参构造方法
每个类都必须至少有一个构造方法(如果没有为类定义构造方法,系统会自动为该类生成一个默认的构造方法,此时参数列表及方法体均为空,所生成的对象的属性值也为零或空。
)
PublicNoteBook{
创建了JFrame对象
……
……
……
}
3.创建一个JFrame对象;并设置相关属性
JFrameframe=newJFrame("我的记事本");
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
frame.setBounds(100,100,500,500);
frame.setResizable(true);
frame.setVisible(true)
4.创建并添加文本框
content=newTextArea("",50,50,TextArea.SCROLLBARS_VERTICAL_ONLY);
frame.add(content);
content.setVisible(true);
content.requestFocusInWindow();
4.2模块设计
(一)菜单栏的建立,组件的添加
1.主菜单
1)创建菜单栏
MenuBarmenubar=newMenuBar();
2)将菜单栏加入到框架中
frame.setMenuBar(menubar);
3)创建“文件”菜单,"编辑"菜单,“格式”菜单,“查看”菜单,“帮助”菜单
Menujm1=newMenu("文件(F)");
Menujm2=newMenu("编辑(E)");
Menujm3=newMenu("格式(F)");
Menujm4=newMenu("查看(F)");
Menujm5=newMenu("帮助(H)");
4)将菜单加入到菜单栏中
menubar.add(jm1);
menubar.add(jm2);
menubar.add(jm3);
menubar.add(jm4);
menubar.add(jm5);
2.添加菜单项到主菜单中
1)“文件”菜单项
(创建“新建”,“打开”,“保存”,“另存为”,“页面设置”,“打印”,“退出”这些子菜单项并为他们添加到菜单上)
MenuItemjmt1=newMenuItem("新建(N)");
jmt1.setShortcut(newMenuShortcut(KeyEvent.VK_N));
jm1.add(jmt1);
MenuItemjmt2=newMenuItem("打开(O)");
jmt2.setShortcut(newMenuShortcut(KeyEvent.VK_O));
jm1.add(jmt2);
MenuItemjmt3=newMenuItem("保存(S)");
jmt3.setShortcut(newMenuShortcut(KeyEvent.VK_S));
jm1.add(jmt3);
MenuItemjmt4=newMenuItem("另存为(A)");
jmt4.setShortcut(newMenuShortcut(KeyEvent.VK_A,false));
jm1.add(jmt4);
MenuItemjmt5=newMenuItem("页面设置(U)");
jmt5.setShortcut(newMenuShortcut(KeyEvent.VK_U,false));
jm1.add(jmt5);
jmt5.setEnabled(false);
MenuItemjmt6=newMenuItem("打印(P)");
jmt6.setShortcut(newMenuShortcut(KeyEvent.VK_P,false));
jm1.add(jmt6);
jmt6.setEnabled(false);
jm1.addSeparator();
MenuItemjmt7=newMenuItem("退出(X)");
jmt7.setShortcut(newMenuShortcut(KeyEvent.VK_P,false));
jm1.addSeparator();
jm1.add(jmt7);
2)“编辑”菜单项
(创建“撤消”,“剪切”,“复制”,“粘贴”,“删除”,“查找”,“查找下一个”,“替换”,“转到”,“全选”,“日期/时间”这些子菜单项,并添加到菜单上)
MenuIteme1=newMenuItem("撤销");
e1.setShortcut(newMenuShortcut(KeyEvent.VK_Z,false));
jm2.add(e1);
jm2.addSeparator();
MenuIteme2=newMenuItem("剪切");
e2.setShortcut(newMenuShortcut(KeyEvent.VK_X,false));
jm2.add(e1);
jm2.addSeparator();
MenuIteme3=newMenuItem("复制");
e3.setShortcut(newMenuShortcut(KeyEvent.VK_C,false));
jm2.add(e3);
MenuIteme4=newMenuItem("粘贴");
e4.setShortcut(newMenuShortcut(KeyEvent.VK_V,false));
jm2.add(e4);
MenuIteme5=newMenuItem("删除");
e5.setShortcut(newMenuShortcut(KeyEvent.VK_DELETE,false));
jm2.add(e5);
jm2.addSeparator();
MenuIteme6=newMenuItem("查找");
e6.setShortcut(newMenuShortcut(KeyEvent.VK_F,false));
jm2.add(e6);
MenuIteme7=newMenuItem("查找下一个");
e7.setShortcut(newMenuShortcut(KeyEvent.VK_3,false));
jm2.add(e7);
MenuIteme8=newMenuItem("替换");
e8.setShortcut(newMenuShortcut(KeyEvent.VK_H,false));
jm2.add(e8);
MenuIteme9=newMenuItem("转到");
e9.setShortcut(newMenuShortcut(KeyEvent.VK_G,false));
jm2.add(e9);
jm2.addSeparator();
MenuIteme10=newMenuItem("全选");
e10.setShortcut(newMenuShortcut(KeyEvent.VK_A,false));
jm2.add(e10);
MenuIteme11=newMenuItem("日期/时间");
e11.setShortcut(newMenuShortcut(KeyEvent.VK_5,false));
jm2.add(e11);
3)“格式”菜单项
(创建子菜单项“自动换行”,并添加到菜单上)
MenuItemgs01=newMenuItem("自动换行(W)");
jm3.add(gs01);
4)“查看”菜单项
(创建子菜单项“状态栏”,并添加到菜单上)
MenuItemfind=newMenuItem("状态栏(S)");
jm4.add(find);
find.setEnabled(false);
5)“帮助”菜单项
(创建子菜单项“帮助主题”和“关于记事本”,并添加到菜单上)
MenuItemhelp01=newMenuItem("帮助主题(H)");
jm4.add(help01);
help01.setEnabled(false);
jm4.addSeparator();
MenuItemhelp02=newMenuItem("关于记事本(A)");
jm4.add(help02);
(二)功能设计
对每个菜单分别进行注册事件监听程序,点击不同菜单项时,显示不同界面。
要想记事本完成需求分析中相应的功能,还必须添加事件监听器。
本程序中ActListener实现了ActionListener接口,用来监听并处理所有菜单项和内容输入区为事件源的事件。
另外,还用来WindowListener来监听处理容器关闭触发的事件,WindowListener继承了WindowsAdapter类并覆盖了WindowsClosing方法。
(三)异常处理
在运行程序代码是有可能会产生异常情况或异常事件,为了避免这种情况,就需要在程序中用到Java异常处理机制。
本程序中选用的异常处理机制是try,catch。
捕获处理异常的第一步是用try选定要监控的异常范围,try后跟随catch代码块。
4.3代码部分
importjava.io.File;
importjava.io.FileReader;
importjava.io.IOException;
importjava.io.FileNotFoundException;
importjava.io.BufferedReader;
importjava.io.BufferedWriter;
importjava.io.FileWriter;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.awt.event.WindowAdapter;
importjava.awt.event.WindowEvent;
importjava.awt.FileDialog;
importjava.awt.TextArea;
importjava.awt.Toolkit;
importjava.awt.Window;
importjava.awt.event.KeyEvent;
importjava.awt.datatransfer.Clipboard;
importjava.awt.datatransfer.DataFlavor;
importjava.awt.datatransfer.StringSelection;
importjava.awt.datatransfer.Transferable;
importjava.awt.datatransfer.UnsupportedFlavorException;
importjava.awt.MenuShortcut;
importjava.awt.Menu;
importjava.awt.MenuBar;
importjava.awt.MenuItem;
importjavax.swing.JButton;
importjavax.swing.JDialog;
importjavax.swing.JFrame;
importjavax.swing.JLabel;
importjavax.swing.JTextField;
importjavax.swing.JFileChooser;
importjavax.swing.filechooser.FileNameExtensionFilter;
importjavax.swing.JOptionPane;
importjava.util.logging.Level;
importjava.util.logging.Logger;
publicclassNoteBook{
privateTextAreacontent;
privateStringfilePath="";//先让路径为空
ToolkittoolKit=Toolkit.getDefaultToolkit();
Clipboardclipboard=toolKit.getSystemClipboard();
publicNoteBook(){
finalJFrameframe=newJFrame("我的记事本");
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
frame.setBounds(100,100,500,500);
frame.setResizable(true);
frame.setVisible(true);
content=newTextArea("",50,50,TextArea.SCROLLBARS_VERTICAL_ONLY);
frame.add(content);
content.setVisible(true);
content.requestFocusInWindow();
MenuBarmenubar=newMenuBar();
frame.setMenuBar(menubar);
Menujm1=newMenu("文件(F)");
Menujm2=newMenu("编辑(E)");
Menujm3=newMenu("格式(F)");
Menujm4=newMenu("查看(F)");
Menujm5=newMenu("帮助(H)");
menubar.add(jm1);
menubar.add(jm2);
menubar.add(jm3);
menubar.add(jm4);
menubar.add(jm5);
MenuItemjmt1=newMenuItem("新建(N)");
jmt1.setShortcut(newMenuShortcut(KeyEvent.VK_N));
jm1.add(jmt1);
MenuItemjmt2=newMenuItem("打开(O)");
jmt2.setShortcut(newMenuShortcut(KeyEvent.VK_O));
jm1.add(jmt2);
MenuItemjmt3=newMenuItem("保存(S)");
jmt3.setShortcut(newMenuShortcut(KeyEvent.VK_S));
jm1.add(jmt3);
MenuItemjmt4=newMenuItem("另存为(A)");
jmt4.setShortcut(newMenuShortcut(KeyEvent.VK_A,false));
jm1.add(jmt4);
MenuItemjmt5=newMenuItem("页面设置(U)");
jmt5.setShortcut(newMenuShortcut(KeyEvent.VK_U,fal