Java课程设计文本编辑器.docx
- 文档编号:4988753
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:35
- 大小:108.48KB
Java课程设计文本编辑器.docx
《Java课程设计文本编辑器.docx》由会员分享,可在线阅读,更多相关《Java课程设计文本编辑器.docx(35页珍藏版)》请在冰豆网上搜索。
Java课程设计文本编辑器
《Java语言》课程期末作业
题目第8题:
文本编辑器
学院
专业
班别
学号
姓名
2010年12月14日
一、课程题目
第8题:
文本编辑器
制作一个简单的文本编辑器,交互性要求:
【最大选题人数:
8】
(1)可输入文字(仅要求英文及标点符号)
(2)实现一些常用的编辑功能:
如复制和粘贴,查找和替换,首字母自动大写,拼写自动更正……
(3)可打开并显示TXT文件,并且可以将编辑结果保存为TXT文件
二、题目分析与设计
2.1需求分析
现在网络上各种文档编辑器数不胜数,有EmEditor,UEStudio,GridinSoftNotepad,Notepad++,win32pad,SkimEdit,UniRed,xint。
功能也是应有尽有,有能改变字体的,有能改变文字颜色的。
但是,这些软件又存在各种各样的瑕疵或问题:
有的文件体积相对于一般文字编辑来说太大;有的功能太繁杂,使初级使用者一时难以掌握。
仅从日常应用方面来说,一个文本编辑器只需一些简单实用的功能就够了。
本程序设计就是依照这样一种使用需要设计了一个简单的记事本程序。
2.2功能设计
本程序要构建的记事本程序参照了Windows操作系统的记事本工具,其功能主要有以下几个方面:
(1).菜单中有“文件”,“编辑”,“格式”,“查看”,“帮助”五个主菜单。
(2)“文件”栏目分别有“新建”,“打开”,“保存”,“打印”,“退出”五个子菜单。
分别用于新建文件,打开文件,保存文件,打印文件和退出记事本。
(3)“编辑”栏目包括有“全选”,“复制”,“剪切”,“粘贴”,“查找”,“查找下一个”,“替换”七个字菜单。
用于全选文字,剪切文字,复制文字,粘贴文字,查找关键字,替换关键字等。
(4)“格式”栏目包括有“自动换行”,“字体”两个功能,点击自动换行可以实现文本自动换行,字体则提供了各种字形字号颜色等选择。
(5)“查看”栏目有“状态”功能。
(6)“帮助”栏目有“帮助主题”,“关于记事本”两个子菜单,帮助主题可以查看windows记事本帮助文件,关于记事本则是作者和版权信息。
2.3模块说明图
类层次调用关系图
记事本运行流程图
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;
importjava.awt.*;
importjava.io.*;
import;
importjavax.swing.*;
import;
publicclassMiniNoteextendsJFrameimplementsActionListener{
JMenuBarmenuBar=newJMenuBar();
JMenufile=newJMenu("文件(F)"),//菜单
edit=newJMenu("编辑(E)"),
format=newJMenu("格式(O)"),
view=newJMenu("查看(V)"),
help=newJMenu("帮助(H)");
JMenuItem[]menuItem={//菜单下拉项
newJMenuItem("新建(N)"),
newJMenuItem("打开(O)"),
newJMenuItem("保存(S)"),
newJMenuItem("打印(P)"),
newJMenuItem("全选(A)"),
newJMenuItem("复制(C)"),
newJMenuItem("剪切(T)"),
newJMenuItem("粘贴(P)"),
newJMenuItem("自动换行(W)"),
newJMenuItem("字体(F)"),
newJMenuItem("状态栏(S)"),
newJMenuItem("帮助主题(H)"),
newJMenuItem("关于记事本(A)"),
newJMenuItem("页面设置(U)"),
newJMenuItem("退出(X)"),
newJMenuItem("查找(F)"),
newJMenuItem("查找下一个(N)"),
newJMenuItem("替换(R)")
};
JPopupMenupopupMenu=newJPopupMenu();;//右键菜单
JMenuItem[]menuItem1={
newJMenuItem("撤销(Z)"),
newJMenuItem("剪切(X)"),
newJMenuItem("复制(C)"),
newJMenuItem("粘贴(V)"),
newJMenuItem("删除(D)"),
newJMenuItem("全选(A)"),
};
privateJTextAreatextArea;//文本区域
privateJScrollPanejs;//滚动条
privateJPaneljp;
privateFileDialogopenFileDialog;//打开保存对话框
privateFileDialogsaveFileDialog;
privateToolkittoolKit;//获取默认工具包。
privateClipboardclipboard;//获取系统剪切板
privateStringfileName;//设置默认的文件名
/**
*MiniEdit方法定义
*
*实现记事本初始化
*
**/
publicMiniNote(){
fileName="无标题";
toolKit=Toolkit.getDefaultToolkit();
clipboard=toolKit.getSystemClipboard();
textArea=newJTextArea();
js=newJScrollPane(textArea);
jp=newJPanel();
openFileDialog=newFileDialog(this,"打开",FileDialog.LOAD);
saveFileDialog=newFileDialog(this,"另存为",FileDialog.SAVE);
js.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
jp.setLayout(newGridLayout(1,1));
jp.add(js);
textArea.setComponentPopupMenu(popupMenu);//文本区域添加右键
textArea.add(popupMenu);
add(jp);
setTitle("迷你记事本");
setFont(newFont("TimesNewRoman",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(inti=0;i<4;i++)
{
file.add(menuItem[i]);
edit.add(menuItem[i+4]);
}
for(inti=0;i<3;++i)
{
edit.add(menuItem[i+15]);
}
for(inti=0;i<2;++i)
{
format.add(menuItem[i+8]);
help.add(menuItem[i+11]);
}
view.add(menuItem[10]);
file.add(menuItem[14]);
for(inti=0;i<6;++i)
{
popupMenu.add(menuItem1[i]);
}
//窗口监听
addWindowListener(newWindowAdapter(){
publicvoidwindowClosing(WindowEvente){
e.getWindow().dispose();
System.exit(0);
}
});
//注册各个菜单项的事件监听器
for(inti=0;i { menuItem[i].addActionListener(this); } for(inti=0;i { menuItem1[i].addActionListener(this); } } /** *actionPerformed方法定义 * *动作触发实现 * **/ publicvoidactionPerformed(ActionEvente){ ObjecteventSource=e.getSource(); if(eventSource==menuItem[0])//新建动作 { textArea.setText(""); } elseif(eventSource==menuItem[1])//打开动作 { openFileDialog.setVisible(true); fileName=openFileDialog.getDirectory()+openFileDialog.getFile(); if(fileName! =null) { openFile(fileName); } } elseif(eventSource==menuItem[2])//保存动作 { saveFileDialog.setVisible(true); fileName=saveFileDialog.getDirectory()+saveFileDialog.getFile(); if(fileName! =null) { writeFile(fileName); } } elseif(eventSource==menuItem[14])//退出动作 { System.exit(0); } elseif(eventSource==menuItem[4]||eventSource==menuItem1[5])//全选动作 { textArea.selectAll(); } elseif(eventSource==menuItem[5]||eventSource==menuItem1[2])//复制动作 { Stringtext=textArea.getSelectedText(); StringSelectionselection=newStringSelection(text); clipboard.setContents(selection,null); } elseif(eventSource==menuItem[6]||eventSource==menuItem1[1])//剪切动作 { Stringtext=textArea.getSelectedText(); StringSelectionselection=newStringSelection(text); clipboard.setContents(selection,null); textArea.replaceRange("",textArea.getSelectionStart(),textArea.getSelectionEnd()); } elseif(eventSource==menuItem[7]||eventSource==menuItem1[3])//粘贴动作 { Transferablecontents=clipboard.getContents(this); if(contents==null)return; Stringtext; text=""; try { text=(String)contents.getTransferData(DataFlavor.stringFlavor); } catch(Exceptionex) { } textArea.replaceRange(text,textArea.getSelectionStart(),textArea.getSelectionEnd()); } elseif(eventSource==menuItem[8])//自动换行 { if(textArea.getLineWrap())textArea.setLineWrap(false); elsetextArea.setLineWrap(true); } elseif(eventSource==menuItem[9])//字体 {//实例化字体类 FontDialogfontdialog=newFontDialog(newJFrame(),"字体",true); textArea.setFont(fontdialog.showFontDialog());//设置字体 } elseif(eventSource==menuItem[11])//帮助 { try { StringfilePath="C: /WINDOWS/Help/notepad.hlp"; Runtime.getRuntime().exec("cmd.exe/c"+filePath); } catch(Exceptionee) { JOptionPane.showMessageDialog(this,"打开系统的记事本帮助文件出错! ","错误信息",JOptionPane.INFORMATION_MESSAGE); } } elseif(eventSource==menuItem[12])//关于记事本 { Stringhelp="迷你记事本版本1.0\n操作系统: WINXPSP3\n编译器: eclipse\n版权" +"所有: lizhiwei\n最终解释权归本人所有," +"授权给: \n\nBuildBy李志威\nQQ: 1\n学校网站: .cn/" +"\n课程设计: JAVA"; JOptionPane.showConfirmDialog(null,help,"关于记事本", JOptionPane.DEFAULT_OPTION,JOptionPane.INFORMATION_MESSAGE); } elseif(eventSource==menuItem[15]||eventSource==menuItem[16])//查找下一个 { search(); } elseif(eventSource==menuItem[17])//替换 { substitude(); } elseif(eventSource==menuItem[3])//打印 { try { textArea.print(); } catch(PrinterExceptione1) { e1.printStackTrace(); } } } /** *openFile方法 * *从TXT读进数据到记事本 * **/ publicvoidopenFile(StringfileName){ try { Filefile=newFile(fileName); FileReaderreadIn=newFileReader(file); intsize=(int)file.length(); intcharsRead=0; char[]content=newchar[size]; while(readIn.ready()) { charsRead+=readIn.read(content,charsRead,size-charsRead); } readIn.close(); textArea.setText(newString(content,0,charsRead)); } catch(Exceptione) { "Erroropeningfile! "); } } /** *saveFile方法 * *从记事本写进数据到TXT * **/ publicvoidwriteFile(StringfileName){ try { Filefile=newFile(fileName); FileWriterwrite=newFileWriter(file); write.write(textArea.getText()); write.close(); } catch(Exceptione) { "Errorclosingfile! "); } } /** *substitude方法 * *实现替换功能 * */ publicvoidsubstitude(){ finalJDialogfindDialog=newJDialog(this,"查找与替换",true); Containercon=findDialog.getContentPane(); con.setLayout(newFlowLayout(FlowLayout.LEFT)); JLabelsearchContentLabel=newJLabel("查找内容(N): "); JLabelreplaceContentLabel=newJLabel("替换为(P) : "); finalJTextFieldfindText=newJTextField(30); finalJTextFieldreplaceText=newJTextField(30); finalJCheckBoxmatchcase=newJCheckBox("区分大小写(C)"); ButtonGroupbGroup=newButtonGroup(); finalJRadioButtonup=newJRadioButton("向上(U)"); finalJRadioButtondown=newJRadioButton("向下(D)"); down.setSelected(true);//默认向下搜索 bGroup.add(up); bGroup.add(down); JButtonsearchNext=newJButton("查找下一个(F)"); JButtonreplace=newJButton("替换(R)"); finalJButtonreplaceAll=newJButton("全部替换(A)"); //"替换"按钮的事件处理 replace.addActionListener(newActionLi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 课程设计 文本 编辑器