文本编辑器的设计与实现.docx
- 文档编号:9003317
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:27
- 大小:638.89KB
文本编辑器的设计与实现.docx
《文本编辑器的设计与实现.docx》由会员分享,可在线阅读,更多相关《文本编辑器的设计与实现.docx(27页珍藏版)》请在冰豆网上搜索。
文本编辑器的设计与实现
软件学院
课程设计报告书
课程名称
设计题目 文本编辑器的设计与实现
专业班级 XXXXXXXXXXX
学 号 xxxxxxxxxx
姓 名 xxx
指导教师
2011 年11月
1 设计时间
2011年11月
2设计目的
《面向对象程序设计》是一门实践性很强的计算机专业基础课程,课程设计是学习完该课程后进行的一次较全面的综合练习。
其目的在于通过实践加深学生对面向对象程序设计的理论、方法和基础知识的理解,掌握使用Java语言进行面向对象设计的基本方法,提高运用面向对象知识分析实际问题、解决实际问题的能力,提高学生的应用能力。
目前文本编辑器种类很多,所提供的功能也很多,但是能满足用户实现多种功能和进行Java的编译与运行很少,不能更好的适应当前用户的要求。
本设计所完成的文本编辑器功能是针对学习Java程序语言,因此我们利用Java程序设计虚拟机和软件对用户及使用者的应用过程形成一整套完整的编写代码,编译,运行。
3设计任务
文本编辑器的设计与实现:
设计一个类似于Windows记事本(Notepad)的Java程序。
可以打开、新建、保存一个文本文件;对选中的文本进行各种编辑操作(设置字体、字号、字型、对齐方式、背景、前景色、复制、粘贴、剪切、查找、替换等);在文本中能够插入对象。
4设计内容
4.1需求分析
需求分析的任务是确定功能必须完成的工作,也就是对目标系统提出完整、准确、清晰、具体的要求。
简单文本编辑器提供给用户基本的纯文本编辑功能,能够将用户录入的文本存储到本地磁盘中。
能够读取磁盘中现有的纯文本文件,以及方便用户进行需要的编辑功能。
文件操作能够实现新建、保存、打开文档等,编辑操作能过实现文本的剪贴、复制、粘贴等,格式操作能过实现字体设置、背景等,帮助操作能够实现关于主题的查看等功能。
4.2概要设计
4.2.1程序基本功能概括
图4.2.1功能架构图
4.2.2程序主要组件概括
1.基本的Frame框架;
2.菜单;
3.打开文件对话框;
4.保存文件对话框;
5.颜色对话框;
6.Choice下拉列表,运来实现字体设置;
7.简单的帮助框架。
4.3详细设计
4.3.1文件打开与保存
文本编辑器的保存和打开功能的实现用文件对话框及输入输出流来完成。
先建立打开和保存对话框,在public voidactionPerformed(ActionEvente)里分别用FileWriter()和FileReader()方法实现保存和打开。
filedialog_save=newFileDialog(this,"保存文件对话框",FileDialog.SAVE);
filedialog_save.setVisible(false);
filedialog_load=newFileDialog(this,"保存文件对话框",FileDialog.LOAD);
ﻩfiledialog_load.setVisible(false);
ﻩfiledialog_save.addWindowListener(newWindowAdapter()
{
ﻩpublicvoidwindowClosing(WindowEvente)
ﻩﻩ{
ﻩﻩﻩfiledialog_save.setVisible(false);
ﻩﻩ}
ﻩ});
filedialog_load.addWindowListener(new WindowAdapter()
ﻩ{
ﻩpublicvoidwindowClosing(WindowEvente)
ﻩﻩ{
ﻩfiledialog_load.setVisible(false);
ﻩﻩﻩ }
ﻩﻩﻩ});
publicvoid actionPerformed(ActionEvente)
{
ﻩif(e.getSource()==itemSave)
ﻩﻩﻩ{
ﻩﻩﻩfiledialog_save.setVisible(true);
ﻩﻩﻩﻩif(filedialog_save.getFile()!
=null)
ﻩﻩﻩ{
ﻩtry{Filefile=new
ﻩFile(filedialog_save.getDirectory(),
ﻩﻩ filedialog_save.getFile());
ﻩ tofile=newFileWriter(file);
ﻩout=newBufferedWriter(tofile);
ﻩout.write(area.getText(),0,(area.getText()).length());
ﻩﻩﻩout.close();
ﻩﻩ tofile.close();
ﻩﻩﻩﻩ}
ﻩﻩﻩcatch(IOExceptione1){}
ﻩ}
ﻩﻩﻩ}
ﻩﻩelse if(e.getSource()==itemLoad)
ﻩﻩ{
ﻩﻩﻩﻩfiledialog_load.setVisible(true);
ﻩﻩﻩarea.setText(null);
ﻩﻩﻩStrings;
ﻩﻩif(filedialog_load.getFile()!
=null)
ﻩﻩ{
ﻩtry{Filefile=new
ﻩﻩFile(filedialog_load.getDirectory(),
ﻩﻩﻩﻩﻩ filedialog_load.getFile());
ﻩﻩﻩﻩﻩ file_reader=newFileReader(file);
ﻩﻩﻩ in=newBufferedReader(file_reader);
ﻩﻩﻩﻩ while((s=in.readLine())!
=null)
ﻩ area.append(s+'\n');
ﻩﻩ in.close();
ﻩﻩﻩ file_reader.close();
ﻩﻩﻩﻩ}
ﻩﻩﻩcatch(IOException e1){}
ﻩﻩﻩ}
ﻩ}
4.3.2字体,字形,字体大小的设置
文本编辑器要实现对字体的设置,选用了GraphicsEnvironment对象调用String[]getAvailableFontFamilyNames()方法,该方法可以获取计算机上所有可用的字体名称,并存放到字符串数组中。
Choicelist;
GraphicsEnvironmentge=GraphicsEnvironment.getLocalGraphicsEnvironment();
StringfontName[]=ge.getAvailableFontFamilyNames();
publicvoiditemStateChanged(ItemEvente)
{
String name=list.getSelectedItem();
Fontf=newFont(name,Font.PLAIN,15);
area.setFont(f);
}
elseif(e.getSource()==item8) //设置字形(常规,倾斜,加粗)
ﻩ{
ﻩﻩﻩFontfont=area.getFont();
intstyle=font.getStyle();
ﻩﻩﻩﻩstyle=style^0;
area.setFont(new Font("",style,font.getSize()));
ﻩﻩ}
ﻩﻩelseif(e.getSource()==item9)
ﻩﻩ{
ﻩﻩﻩFontfont=area.getFont();
intstyle=font.getStyle();
ﻩﻩﻩﻩstyle=style^2;
area.setFont(new Font("",style,font.getSize()));
ﻩﻩ}
ﻩelseif(e.getSource()==item10)
ﻩﻩﻩﻩ{
ﻩFont font=area.getFont();
ﻩﻩﻩﻩintstyle=font.getStyle();
ﻩﻩﻩﻩﻩstyle=style^1;
area.setFont(new Font("",style,font.getSize()));
ﻩﻩﻩ}
ﻩﻩﻩelseif(e.getSource()==item11) //设置字体大小
ﻩﻩ{
ﻩﻩﻩﻩﻩFontfont=area.getFont();
ﻩﻩﻩﻩﻩintstyle=font.getStyle();
ﻩﻩﻩarea.setFont(new Font(font.getName(),style,12));
ﻩﻩﻩ}
ﻩﻩﻩelseif(e.getSource()==item12)
ﻩﻩﻩ{
ﻩﻩﻩﻩFontfont=area.getFont();
ﻩﻩﻩﻩﻩintstyle=font.getStyle();
ﻩﻩﻩarea.setFont(new Font(font.getName(),style,24));
ﻩﻩﻩﻩ}
ﻩﻩﻩﻩﻩelseif(e.getSource()==item13)
ﻩ{
ﻩﻩFont font=area.getFont();
ﻩﻩﻩint style=font.getStyle();
ﻩﻩ area.setFont(new Font(font.getName(),style,36));
ﻩﻩ}
4.3.3剪切,复制,粘贴设置
文本编辑器中关于剪切,复制,粘贴功能的实现选用处理JTextArea的DocumentEvent事件,通过area.cut(),area.copy(),area.paste()方法,点击“编辑”中相应菜单项可以选择将文本区中选中的内容剪切,复制,粘贴。
publicvoidchangedUpdate(DocumentEvent e)
ﻩ{
ﻩﻩﻩStrings=area.getText();
ﻩ}
publicvoidremoveUpdate(DocumentEvente)
ﻩﻩ{
ﻩchangedUpdate(e);
ﻩﻩ}
ﻩpublicvoidinsertUpdate(DocumentEvent e)
ﻩﻩ{
ﻩﻩﻩchangedUpdate(e);
ﻩﻩ}
publicvoidactionPerformed(ActionEvente)
ﻩ{
elseif(e.getSource()==item2)
ﻩ{
area.cut();
ﻩﻩ}
ﻩelseif(e.getSource()==item3)
ﻩﻩﻩ{
ﻩﻩﻩarea.copy();
ﻩﻩﻩ}
ﻩﻩﻩelseif(e.getSource()==item4)
ﻩ{
ﻩﻩarea.paste();
ﻩﻩﻩ}
}
4.3.4插入子菜单,删除子菜单,创建格式菜单及其菜单项
JMenuItem insertItem=newJMenuItem("插入文本(K)");
insertItem.setMnemonic('K');
editMenu.add(insertItem);
insertItem.addActionListener(
new ActionListener(){
ﻩ public voidactionPerformed(ActionEventevent){
ﻩ JPanelinsertPanel=newJPanel();
ﻩﻩJLabelinsertLabel=newJLabel("要插入的内容");
JTextFieldinputText=newJTextField(10);
ﻩ ﻩﻩ insertPanel.add(insertLabel);
ﻩ insertPanel.add(inputText);
ﻩ JOptionPane.showMessageDialog(null,insertPanel);
intfromIndex=displayText.getCaretPosition();//取得当前的光标位置
displayText.insert(inputText.getText(),fromIndex);
ﻩ }
}
ﻩ);
JMenuItemRemoveItem=new JMenuItem("删除(G)");
RemoveItem.setMnemonic('G');
ﻩeditMenu.add(RemoveItem);
ﻩRemoveItem.addActionListener(new ActionListener()
ﻩ {
ﻩ public void actionPerformed(ActionEvente)
{int start=displayText.getSelectionStart();
ﻩﻩintend=displayText.getSelectionEnd();
displayText.replaceRange(null,start,end);
ﻩ }
ﻩ });
editMenu.addSeparator();
bar.add(editMenu );//addeditMenu
JMenuformatMenu=newJMenu( "格式(R)" );
formatMenu.setMnemonic('R');
4.3.5创建,添加帮助菜项
JMenuhelpMenu =newJMenu("帮助(H)");
helpMenu.setMnemonic('H');
JMenuItemhelpItem=newJMenuItem( "帮助主题(H)..." );
helpItem.setMnemonic('H' );
helpMenu.add(helpItem);
helpItem.addActionListener(
new ActionListener(){
publicvoidactionPerformed(ActionEventevent ){
JTextAreahelpText=new JTextArea(
JScrollPanescroller= newJScrollPane(helpText);
JOptionPane.showMessageDialog(null,scroller);
}
}
);
bar.add(helpMenu);//添加
4.4设计成果
4.4.1运行界面
图2文本编辑器主界面
图3文本编辑器编辑界面
图4文本编辑器文件界面
图5文本编辑器格式
图6文本编辑器查找界面
图7文本编辑器帮助界面
图8文本编辑器字体名称界面
图9文本编辑器字体风格界面
图10文本编辑器中帮助中关于对话框
图11查找消息对话框
图12文本编辑器中另存为对话框
4.4.2主要代码
import java.awt.*;
importjava.awt.event.*;
importjava.awt.datatransfer.*;
importjavax.swing.*;
import java.io.*;
import java.lang.*;
publicclassNotepadextendsJFrame{
privatefinalColorcolorvalues[]=
{Color.black,Color.blue,Color.red,Color.green };//定义颜色数组
StringstyleNames[] = { "Bold","Italic"};//定义风格数组
StringfontNames[]={ "宋体","华文行楷","隶书"};//字体数组
String[]sizeString = newString[30];//字号数组
int[]size= new int[30];//与字号数组对应的字号整数,用于设置文字大小
privateJRadioButtonMenuItemcolorItems[],fonts[];
privateJCheckBoxMenuItemstyleItems[];
private JTextAreadisplayText;//定义文本编辑区
privateButtonGroupfontGroup,colorGroup;//字体组,跟字色组
private int style;//字体风格
privateJScrollPanescroll;//为文本编辑区提供滚动条
privateStringselectText= "";//存放文本编辑区中选中的文本内容
privateJComboBox styleBox,fontBox,sizeBox;//工具栏
private JPaneltoolPanel;//存放工具栏
privateint rowNumber=0;
privateFileDialogfd=newFileDialog(this);
//setup GUI
publicNotepad()
{
super("记事本");
//创建菜单条
JMenuBarbar= newJMenuBar();
setJMenuBar(bar)
//设置文件菜单及其菜单项
JMenu fileMenu = newJMenu("文件(F)");
fileMenu.setMnemonic( 'F');
//设置新建菜单项
JMenuItemnewItem= newJMenuItem("新建(N)");
newItem.setMnemonic( 'N');
fileMenu.add(newItem);
newItem.addActionListener(
ﻩ new ActionListener() {
ﻩ publicvoidactionPerformed(ActionEvent event)
ﻩ{displayText.setText("");
ﻩ }});
//设置打开菜单项
JMenuItemopenItem= newJMenuItem("打开(O)");
ﻩ openItem.setMnemonic('O');
fileMenu.add(openItem);
ﻩ openItem.addActionListener(
ﻩ newActionListener(){
ﻩ publicvoid actionPerformed(ActionEventevent)
ﻩﻩﻩ{
fd.setTitle("打开");
//设置标题
fd.show();
ﻩﻩif (fd.getFile()!
=null){
Filefile= new File(fd.getFile()); //用从fd中取得的文件建立新文件,即打开的文件
displayText.setText("");
ﻩﻩﻩﻩtry{
ﻩﻩﻩﻩﻩFileReader f =newFileReader(file);
ﻩﻩBufferedReaderb= newBufferedReader(f);//按行读打开的文件,然后传入文本域
ﻩﻩﻩﻩﻩString s;
ﻩﻩﻩtry{
ﻩﻩﻩﻩwhile((s =b.readLine())!
=null){
ﻩﻩﻩﻩﻩdisplayText.append(s+"\n");//将给定文本追加到文本域的当前文本(即把读的内容加入文本域)
ﻩﻩﻩﻩ}
ﻩﻩﻩﻩf.close();
ﻩﻩﻩb.close();
ﻩﻩ}catch(IOExceptionex){}
}catch(FileNotFoundExceptionex){
}
ﻩelse{return;}
}
ﻩﻩ});
fileMenu.addSeparator(); //加分隔线
//设置退出菜单项
JMenuItemexitItem= newJMenuItem("退出(X)");
exitItem.setMnemonic( 'x');
fileMenu.add(exitItem);
exitItem.addActionListener(
newActionListener(){
publicvoid actionPerformed( ActionEventevent )
{
Syst
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 文本 编辑器 设计 实现