已阅读5页,还剩29页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
你的姓名Java语言课程期末作业Java语言课程期末作业题 目 第8题:文本编辑器 学 院 专 业 班 别 学 号 姓 名 2010年12月14日34一、 课程题目 第8题:文本编辑器制作一个简单的文本编辑器,交互性要求:【最大选题人数:8】(1) 可输入文字(仅要求英文及标点符号)(2) 实现一些常用的编辑功能:如复制和粘贴,查找和替换,首字母自动大写,拼写自动更正(3) 可打开并显示TXT文件,并且可以将编辑结果保存为TXT文件二、题目分析与设计 2.1需求分析现在网络上各种文档编辑器数不胜数,有EmEditor ,UEStudio ,GridinSoft Notepad ,Notepad+,win32pad ,SkimEdit,UniRed, xint 。功能也是应有尽有,有能改变字体的,有能改变文字颜色的。但是,这些软件又存在各种各样的瑕疵或问题:有的文件体积相对于一般文字编辑来说太大;有的功能太繁杂,使初级使用者一时难以掌握。仅从日常应用方面来说,一个文本编辑器只需一些简单实用的功能就够了。本程序设计就是依照这样一种使用需要设计了一个简单的记事本程序。2.2功能设计本程序要构建的记事本程序参照了Windows操作系统的记事本工具,其功能主要有以下几个方面:(1).菜单中有“文件”,“编辑”,“格式”,“查看”,“帮助”五个主菜单。(2)“文件”栏目分别有“新建”,“打开”,“保存”,“打印”,“退出”五个子菜单。分别用于新建文件,打开文件,保存文件,打印文件和退出记事本。 (3)“编辑”栏目包括有“全选”,“复制”,“剪切”,“粘贴”,“查找”,“查找下一个”,“替换”七个字菜单。用于全选文字,剪切文字,复制文字,粘贴文字,查找关键字,替换关键字等。 (4)“格式”栏目包括有“自动换行”,“字体”两个功能,点击自动换行可以实现文本自动换行,字体则提供了各种字形字号颜色等选择。 (5)“查看”栏目有“状态”功能。 (6)“帮助”栏目有“帮助主题”,“关于记事本”两个子菜单,帮助主题可以查看windows记事本帮助文件,关于记事本则是作者和版权信息。2.3模块说明图 类层次调用关系图implementsActionListenerFonDialogMiNinoteJFrameextends 记事本运行流程图MiNinote的构造方法添加事件监听初始化容器组件初始化初始化添加右键菜单菜单栏添加滚动条文字输入区格式查看帮助编辑文件查找下一个关于记事本替换自动换行字体状态栏查找粘贴剪切复制全选打印保存打开新建帮助主题退出 openFile()方法FonDialog类构造方法writeFile()方法Search()方法substitude()方法2.4程序相关说明 整个记事本分成:Jframe程序主体框架,Jmenu菜单栏、JtextArea文本输入区、PopupMenu右键菜单、JscrollPane滚动条、FonDialog字体类等。本程序中首先定义一个MiNinote类继承JFrame作为最底层容器。 要想记事本完成需求分析中相应的功能,还必须添加事件监听器。事件监听器不仅要添加在菜单栏和内容输入区,还需加在容器中。本程序中ActListener实现了ActionListener接口,用来监听并处理所有菜单项和内容输入区为事件源的事件。 另外,还用来WindowListener来监听处理容器关闭触发的事件,WindowListener继承了WindowsAdapter类并覆盖了WindowsClosing方法。三、测试分析1、主界面的设计 2、文件菜单设计2、编辑设计3、格式设计4、查看设计5、帮助设计 6、打印设计6、打开功能设计与实现 运行记事本点击文件-点击打开弹出如下图对话框,选中文本“二叉树的各种操作.txt”,点击打开,如下图可以清楚看到文本所有内容被正确显示在文本阅读区,其中文本区右侧多余文本可以使用滚动条查看。点击打开后效果:7、保存功能设计与实现 运行记事本点击文件-点击保存弹出如下图对话框,输入保存文件名和类型“保存功能.txt”,点击保存,内容被正确保存至电脑磁盘。 重新运行记事本选择打开功能,找到刚才保存路径,如下图可以清楚查看到刚才正确保存的文本文件“保存功能.txt”:8、复制功能设计和实现 运行记事本输入文本,选择文本区域,右键选择复制功能,当然这个功能在编辑栏目的复制功能有同样的效果,如图:9、粘贴设计和实现 上一步执行复制功能后,选中区域右键点击粘贴,如图可以看到文本被正确的拷贝到原文下方:10、剪切设计和实现 上一步执行粘贴功能后,选中区域右键点击剪切,效果如下图所示: 剪切后效果如图:11、全选功能设计和实现效果如下图:12、查找功能设计与实现 选择编辑栏查找功能输入查找关键字“eeeFFF”,选择区分大小写,查找反向由下往上,测试可发现正确找到第六行文本:12、替换功能设计和实现继续上面内容选择编辑栏替换功能输入查找关键字“AAAbbb”替换为“123456”,选择区分大小写,查找方向由上往下,测试全部替换功能,测试效果如下:13、字体设计 文本区域输入文字或字符,选择格式栏目选择字体,弹出如下图对话框,选择其中样式如下:设置楷体+加粗+30号字体效果如下:14、关于记事本附录:源代码 /记事本主体类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;i4;i+) file.add(menuItemi); edit.add(menuItemi+4); for(int i=0;i3;+i) edit.add(menuItemi+15); for(int i=0;i2;+i) format.add(menuItemi+8); help.add(menuItemi+11); view.add(menuItem10); file.add(menuItem14); for(int i=0; i6;+i) popupMenu.add(menuItem1i); /窗口监听 addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) e.getWindow().dispose(); System.exit(0); ); /注册各个菜单项的事件监听器 for(int i=0;imenuItem.length;i+) menuItemi.addActionListener(this); for(int i=0;i 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, FindStartPos - 1); else a = strA.lastIndexOf(strB, FindStartPos- findText.getText().length() - 1); 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, FindStartPos - 1); else a = strA.lastIndexOf(strB, FindStartPos - findText.getText().length() - 1); else if (down.isSelected() 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 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.set
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- AI机器人与美食
- 消防安全宣传三折页
- 2026及未来5年中国台式手动调色机数据监测研究报告
- 2026及未来5年中国双速立式和面机数据监测研究报告
- 2026事业单位工勤技能-江苏-江苏造林管护工四级(中级工)历年参考题库含答案详解3套试卷
- 2026事业单位工勤技能-新疆-新疆经济岗位工二级(技师)历年参考题库含答案详解3套试卷
- 住宅消防安全疏散规范
- 2026事业单位工勤技能-新疆-新疆中式烹调师二级(技师)历年参考题库含答案详解3套试卷
- 2026 年短时暴雨突发性灾害防范专题
- 2026年秋季开学大一复习方法学期安排课件
- 2026年陕西省宝鸡市重点学校初一入学数学分班考试试题及答案
- 2026年全国一级建造师之一建公路工程实务考试快速提分卷详细参考解析
- 2026年四川省夹金山国有林保护局有限公司公开招聘工作人员25人考试备考题库及答案详解
- 混合自结纹施工工艺
- 2026年社区工作者社工实务练习题及答案
- 机加工安全管理制度条例
- 一升二语文暑假作业每日一练-一下
- 2026浙江绍兴京越地铁有限公司运营分公司第一次社会招聘24人备考题库及1套完整答案详解
- NB-T+10110-2018风力发电场技术监督导则
- JJF 1915-2021倾角仪校准规范
- DB11-T 1118-2022城镇污水处理能源消耗限额
评论
0/150
提交评论