记事本程序设计与实现-java
- 格式:doc
- 大小:293.50 KB
- 文档页数:20
Java程序设计—课程设计报告题目:记事本程序设计专业:信息管理与信息系统班级:学号:**************:***成绩:完成时间:2011年12月目录第一章、需求分析 (3)1.1需求分析 (3)1.2功能设计 (3)第二章、概要设计 (4)2.1 程序设计思路 (4)2.2 模块说明图 (4)2.3 程序流程 (5)2.4 程序相关说明 (5)2.5 程序运行界 (6)第三章. 程序详细设计与分析 (6)3.1.初始化组件 (6)3.2.构建菜单栏及其下拉菜单 (8)3.3. 创建右键弹出菜单 (13)3.4. 创建工具栏 (15)第四章.使用说明 (17)第五章.测试分析 (18)第六章.课程设计总结 (19)第七章、参考文献 (20)记事本程序的设计摘要:该报告中的程序是使用Java语言编写,能够进行输入文字操作,并具有新建文件,打开文件,保存文件,退出,复制,粘贴,剪切,查找,帮助等功能。
该程序主要用到了Java swing和事件监听等。
关键字:记事本;Java语言第一章、需求分析1.1需求分析现在网络上各种文档编辑器数不胜数,有EmEditor ,UEStudio ,GridinSoft Notepad ,Notepad++,win32pad ,SkimEdit,UniRed, xint 。
功能也是应有尽有,有能改变字体的,有能改变文字颜色的。
但是,这些软件又存在各种各样的瑕疵或问题:有的文件体积相对于一般文字编辑来说太大;有的功能太繁杂,使初级使用者一时难以掌握。
仅从日常应用方面来说,一个文本编辑器只需一些简单实用的功能就够了。
本程序设计就是依照这样一种使用需要设计了一个的记事本程序,基本能够满足大多数人的日常功能需求。
1.2功能设计本程序要构建的记事本程序参照了Windows操作系统的记事本工具,其功能有以下几个方面:(1)菜单中有“文件”,“编辑”,“格式”,“查看”,“关于”五个主菜单(2)“文件”有“新建”“打开”“保存”“退出”,“另存为”,“打印”6个子菜单:分别用于新建文件,打开文件,保存文件,退出记事本。
(3)“编辑”中有“撤销”,“剪切”“复制”“粘贴”“删除”,“”查找,“查找下一个”,“替换”,“转到”,“全选”,“时间/日期”11个字菜单:用于剪切文字,复制文字,粘贴文字等编辑操作。
(4)“格式”菜单中有“自动换行”,“字体”,“颜色”等子菜单。
(5)“查看”菜单中有“状态栏”子菜单。
(6)“帮助”菜单中有“帮助主题”和“关于”子菜单。
第二章、概要设计2.1 程序设计思路在本程序中,设计了一个菜单栏和文本内容区。
设计过程中用到了JTextArea;,JMenuBar,JPanel等。
JMenuBar用来制作菜单,菜单包括“文件”“编辑”“格式”,“查看”,“帮助”。
JTextArea主要用来输入文本。
为了加入颜色的设置,所以加了一个JColorChooser组件。
2.2 模块说明图在图中,首先创建一个名为Notepad4的类并继承JFrame类作为最底层的容器。
在图中,构造一个Notepad4类时要做三件事情,分别是初始化容器(initTextContent)、初始化组件(initMenu、initAboutDialog)、设置事件监听器。
2.3 程序流程2.4 程序相关说明整个记事本分为3块:菜单栏、内容输入区和状态栏。
本程序中首先定义一个Notepad4类继承JFrame作为最底层容器。
(1)JTextArea Text;为程序文本输入区。
(2)JMenuBar MenuBar为菜单栏。
(3)JPanel toolBar为工具栏。
(4)class MyFont implements ActionListener要想记事本完成需求分析中相应的功能,还必须添加事件监听器。
事件监听器不仅要添加在菜单栏和内容输入区,还需加在容器中。
本程序中DocumentListener实现了ActionListener接口,用来监听并处理所有菜单项和内容输入区为事件源的事件。
另外,还用来ListSelectionListener和ActionListener来监听处理容器关闭触发的事件。
2.5 程序运行界第三章. 程序详细设计与分析3.1.初始化组件public class Notepad4 extends JFrame implements ActionListener,DocumentListener {JMenu mFile, mEdit, mMode, mView, mHelp;// ---------------文件菜单JMenuItem mFile_New, mFile_Open, mFile_Save, mFile_ASave, mFile_Print,mFile_Exit;// ---------------编辑菜单JMenuItem mEdit_Undo, mEdit_Cut, mEdit_Copy, mEdit_Paste, mEdit_Del,mEdit_Search, mEdit_SearchNext, mEdit_Replace, mEdit_Turnto,mEdit_SelectAll, mEdit_TimeDate;// ---------------格式菜单JCheckBoxMenuItem formatMenu_LineWrap;JMenu formatMenu_Color;JMenuItem formatMenu_Font, formatMenu_Color_FgColor,formatMenu_Color_BgColor;// ---------------查看菜单JCheckBoxMenuItem viewMenu_Status;// ---------------帮助菜单JMenuItem mHelp_HelpTopics, mHelp_About;// ---------------弹出菜单级菜单项JPopupMenu popupMenu;JMenuItem popupMenu_Undo, popupMenu_Cut, popupMenu_Copy, popupMenu_Paste, popupMenu_Delete, popupMenu_SelectAll;// 文本编辑区域static JTextArea Text;// 状态栏标签JLabel statusLabel1, statusLabel2, statusLabel3;JToolBar statusBar;// ---------------系统剪贴板Toolkit toolKit = Toolkit.getDefaultToolkit();Clipboard clipBoard = toolKit.getSystemClipboard();// ---------------创建撤消操作管理器protected UndoManager undo = new UndoManager();protected UndoableEditListener undoHandler = new UndoHandler();// ----------------其它变量boolean isNewFile = true; // 是否新文件(未保存过的)File currentFile; // 当前文件名String oldValue; // 存放编辑区原来的内容,用于比较文本是否有改动JButton fontOkButton; // 字体设置里的"确定"按钮// ----------------设置编辑区默认字体protected Font defaultFont = new Font("宋体", Font.PLAIN, 12);GregorianCalendar time = new GregorianCalendar();int hour = time.get(Calendar.HOUR_OF_DAY);int min = time.get(Calendar.MINUTE);int second = time.get(Calendar.SECOND);File saveFileName = null, fileName = null;3.2.构建菜单栏及其下拉菜单public Notepad4() {super("VXBB的记事本");setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);Container container = getContentPane();// System.out.println(Text.getDragEnabled()); //支持自动拖放JScrollPane scroll = new JScrollPane(Text);scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);Text.setWrapStyleWord(true); // 设置单词在一行不足容纳时换行Text.setLineWrap(true);Text.setFont(defaultFont); // 设置编辑区默认字体Text.setBackground(Color.white); // 设置编辑区默认背景色Text.setForeground(Color.black); // 设置编辑区默认前景色oldValue = Text.getText(); // 获取原文本编辑区的内容// --------------------------编辑区注册事件监听Text.getDocument().addUndoableEditListener(undoHandler); // 添加负责通知任何更改的撤消侦听器Text.getDocument().addDocumentListener(this); // 添加负责通知任何更改的文档侦听器JMenuBar MenuBar = new JMenuBar();mFile = new JMenu("文件(F)", true); // 创建菜单mEdit = new JMenu("编辑(E)", true);mMode = new JMenu("格式(O)", true);mView = new JMenu("查看(V)", true);mHelp = new JMenu("帮助(H)", true);mEdit.addActionListener(new ActionListener() // 注册事件监听{public void actionPerformed(ActionEvent e) {checkMenuItemEnabled(); // 设置剪切、复制、粘贴、删除等功能的可用性}});mFile.setMnemonic('F');mEdit.setMnemonic('E');mMode.setMnemonic('O');mView.setMnemonic('V');mHelp.setMnemonic('H');MenuBar.add(mFile);MenuBar.add(mEdit);MenuBar.add(mMode);MenuBar.add(mView);MenuBar.add(mHelp);// --------------文件菜单mFile_New = new JMenuItem("新建(N)", 'N');mFile_Open = new JMenuItem("打开(O)", 'O');mFile_Save = new JMenuItem("保存(S)", 'S');mFile_ASave = new JMenuItem("另存为(A)", 'A');mFile_Print = new JMenuItem("打印(P)", 'P');mFile_Exit = new JMenuItem("退出(X)", 'X');mFile_New.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,InputEvent.CTRL_MASK));mFile_Open.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL_MASK));mFile_Save.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK));mFile_Print.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P, InputEvent.CTRL_MASK));mFile_New.addActionListener(this); // 注册事件监听mFile_Open.addActionListener(this);mFile_Save.addActionListener(this);mFile_ASave.addActionListener(this);mFile_Print.addActionListener(this);mFile_Exit.addActionListener(this);mFile.add(mFile_New); // 添加菜单项mFile.add(mFile_Open);mFile.add(mFile_Save);mFile.add(mFile_ASave);mFile.addSeparator(); // 添加分割线mFile.add(mFile_Print);mFile.addSeparator(); // 添加分割线mFile.add(mFile_Exit);// --------------编辑菜单mEdit_Undo = new JMenuItem("撤消(U)", 'U');mEdit_Cut = new JMenuItem("剪切(T)", 'T');mEdit_Copy = new JMenuItem("复制(C)", 'C');mEdit_Paste = new JMenuItem("粘贴(P)", 'P');mEdit_Del = new JMenuItem("删除(L)", 'L');mEdit_Search = new JMenuItem("查找(F)", 'F');mEdit_SearchNext = new JMenuItem("查找下一个(N)", 'N');mEdit_Replace = new JMenuItem("替换(R)", 'R');mEdit_Turnto = new JMenuItem("转到(G)", 'G');mEdit_SelectAll = new JMenuItem("全选(A)", 'A');mEdit_TimeDate = new JMenuItem("时间/日期(D)", 'D');mEdit_Cut.setEnabled(false);mEdit_Undo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z,InputEvent.CTRL_MASK));mEdit_Cut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,InputEvent.CTRL_MASK));mEdit_Copy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK));mEdit_Paste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, InputEvent.CTRL_MASK));mEdit_Del.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0)); mEdit_Search.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F, InputEvent.CTRL_MASK));mEdit_SearchNext.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F3,0));mEdit_Replace.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H, InputEvent.CTRL_MASK));mEdit_Turnto.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_G, InputEvent.CTRL_MASK));mEdit_SelectAll.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, InputEvent.CTRL_MASK));mEdit_TimeDate.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F5, 0)); mEdit_Undo.addActionListener(this); // 注册事件监听mEdit_Cut.addActionListener(this);mEdit_Copy.addActionListener(this);mEdit_Paste.addActionListener(this);mEdit_Del.addActionListener(this);mEdit_Search.addActionListener(this);mEdit_SearchNext.addActionListener(this);mEdit_Replace.addActionListener(this);mEdit_Turnto.addActionListener(this);mEdit_SelectAll.addActionListener(this);mEdit_TimeDate.addActionListener(this);mEdit.add(mEdit_Undo); // 添加菜单项mEdit.addSeparator(); // 添加分割线mEdit.add(mEdit_Cut);mEdit.add(mEdit_Copy);mEdit.add(mEdit_Paste);mEdit.add(mEdit_Del);mEdit.addSeparator();mEdit.add(mEdit_Search);mEdit.add(mEdit_SearchNext);mEdit.add(mEdit_Replace);mEdit.add(mEdit_Turnto);mEdit.addSeparator();mEdit.add(mEdit_SelectAll);mEdit.add(mEdit_TimeDate);// --------------格式菜单formatMenu_LineWrap = new JCheckBoxMenuItem("自动换行(W)"); formatMenu_LineWrap.setMnemonic('W');formatMenu_LineWrap.setState(true);formatMenu_Font = new JMenuItem("字体(F)", 'F');formatMenu_Color = new JMenu("颜色");formatMenu_Color_FgColor = new JMenuItem("字体颜色"); formatMenu_Color_BgColor = new JMenuItem("背景颜色"); formatMenu_LineWrap.addActionListener(this); // 注册事件监听formatMenu_Font.addActionListener(this);formatMenu_Color_FgColor.addActionListener(this);formatMenu_Color_BgColor.addActionListener(this);mMode.add(formatMenu_LineWrap); // 添加菜单项mMode.addSeparator();mMode.add(formatMenu_Font);mMode.add(formatMenu_Color);formatMenu_Color.add(formatMenu_Color_FgColor);formatMenu_Color.add(formatMenu_Color_BgColor);// --------------查看菜单viewMenu_Status = new JCheckBoxMenuItem("状态栏(S)");viewMenu_Status.setMnemonic('S');viewMenu_Status.setState(true);viewMenu_Status.addActionListener(this);mView.add(viewMenu_Status);// --------------帮助菜单mHelp_HelpTopics = new JMenuItem("帮助(H)", 'H');mHelp_About = new JMenuItem("关于(A)", 'A');mHelp_HelpTopics.addActionListener(this);mHelp_About.addActionListener(this);mHelp.add(mHelp_HelpTopics);mHelp.addSeparator(); // 添加分割线mHelp.add(mHelp_About);3.3. 创建右键弹出菜单popupMenu = new JPopupMenu();popupMenu_Undo = new JMenuItem("撤消(U)", 'U');popupMenu_Cut = new JMenuItem("剪切(T)", 'T');popupMenu_Copy = new JMenuItem("复制(C)", 'C');popupMenu_Paste = new JMenuItem("粘贴(P)", 'P');popupMenu_Delete = new JMenuItem("删除(D)", 'D');popupMenu_SelectAll = new JMenuItem("全选(A)", 'A');popupMenu_Undo.setEnabled(false); // 撤消选项初始设为不可用// ---------------向右键菜单添加菜单项和分隔符popupMenu.add(popupMenu_Undo);popupMenu.addSeparator();popupMenu.add(popupMenu_Cut);popupMenu.add(popupMenu_Copy);popupMenu.add(popupMenu_Paste);popupMenu.add(popupMenu_Delete);popupMenu.addSeparator();popupMenu.add(popupMenu_SelectAll);// --------------------右键菜单注册事件popupMenu_Undo.addActionListener(this);popupMenu_Cut.addActionListener(this);popupMenu_Copy.addActionListener(this);popupMenu_Paste.addActionListener(this);popupMenu_Delete.addActionListener(this);popupMenu_SelectAll.addActionListener(this);// --------------------文本编辑区注册右键菜单事件Text.addMouseListener(new MouseAdapter() {public void mousePressed(MouseEvent e) {checkForTriggerEvent(e);}public void mouseReleased(MouseEvent e) {checkForTriggerEvent(e);}private void checkForTriggerEvent(MouseEvent e) {if (e.isPopupTrigger())popupMenu.show(e.getComponent(), e.getX(), e.getY());// 在组件调用者的坐标空间中的位置// X、Y// 显示弹出菜单。