文本编辑器的设计与实现.docx
《文本编辑器的设计与实现.docx》由会员分享,可在线阅读,更多相关《文本编辑器的设计与实现.docx(28页珍藏版)》请在冰豆网上搜索。
文本编辑器的设计与实现
目录
1前言1
2需求分析1
2.1任务和要求1
2.2运行环境1
2.3开发工具2
3分析和设计2
3.1系统分析及设计思路2
3.1.1概要设计.........................................................................................2
3.1.2详细设计.........................................................................................3
3.2主要类图9
4具体代码实现10
5课程设计总结20
5.1程序运行结果或预期运行结果20
5.2设计结论22
参考文献23
致谢23
1前言
设计一个类似于Windows记事本(Notepad)的Java程序。
可以打开、新建、保存一个文本文件;对选中的文本进行各种编辑操作(设置字体、字号、字型、对齐方式、背景、前景色、复制、粘贴、剪切、查找、替换等);在文本中能够插入对象。
课程设计选用Eclipse作为开发平台以提高开发效率。
采用UML建模技术进行系统的分析设计,画出了系统用例图和类图,并将UML图复制到设计报告中。
课程设计报告内容包括:
课程设计目的、设计任务与要求、设计说明书、设计成果和设计心得五个部分。
这次设计用到了以下内容:
(1)面向对象技术中的继承与多态(重载和覆盖)机制、各种修饰符的使用
(2)类、包、接口的定义与使用
(3)常用工具类与算法的实现(数组、向量、字符串、链表)
(4)java.awt、javax.swing中常用标准GUI组件及相应的事件处理
(5)Java的异常处理机制
(6)Java的数据库连接技术
(7)Java的多线程技术与动画制作
(8)Java的网络编程
2需求分析
2.1任务和要求
简单文本编辑器提供给用户基本的纯文本编辑功能,能够将用户录入的文本存储到本地磁盘中。
能够读取磁盘中现有的纯文本文件,以及方便用户进行需要的编辑功能。
文件操作能够实现新建、保存、打开文档等,编辑操作能过实现文本的剪贴、复制、粘贴等,格式操作能过实现字体设置、背景等,帮助操作能够实现关于主题的查看等功能。
2.2运行环境
(1)WINDOWS2000/XP系统
(2)eclipse
2.3开发工具
Java
3分析和设计
3.1系统分析及设计思路
3.1.1概要设计
(一)其基本功能包括:
1)基本的文本操作功能。
包括新建,保存,打开,保存。
2)基本的编辑功能。
包括复制,剪贴,粘贴。
3)基本的格式功能,背景。
4)简单的帮助,关于主题。
(二)主要的组件包括:
1)基本的Frame框架;
2)菜单;
3)打开文件对话框;
4)保存文件对话框;
5)颜色对话框;
6)Choice下拉列表,运来实现字体设置;
7)简单的帮助框架。
(三)设计示意图
3.1.2详细设计
1)文件打开与保存对话框
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(newWindowAdapter()
{
publicvoidwindowClosing(WindowEvente)
{
filedialog_load.setVisible(false);
}
});
publicvoidactionPerformed(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){}
}
}
elseif(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(IOExceptione1){}
}
}
}
文本编辑器的保存和打开功能的实现用文件对话框及输入输出流来完成。
先建立打开和保存对话框,在publicvoidactionPerformed(ActionEvente)里分别用FileWriter()和FileReader()方法实现保存和打开。
2)调用颜色对话框
elseif(e.getSource()==item5)
{
ColornewColor=JColorChooser.showDialog(this,"调色板",area.getBackground());
if(newColor!
=null)
area.setBackground(newColor);
}
文本编辑器要实现背景功能可以用javax.swing包中的JColorChooser类的静态方法。
PubicstaticColorshowDialog(Component,Stringtitle,ColorinitialColor),其中参数Component指定对话框所依赖的组件,即文本编辑器中的文本区area,title指定对话框的标题“调色板”,initialColor指定对话框返回的初始颜色,即对话框消失后,返回默认值。
3)建立Choice下拉列表实现对字体的设置
Choicelist;
GraphicsEnvironmentge=GraphicsEnvironment.getLocalGraphicsEnvironment();
StringfontName[]=ge.getAvailableFontFamilyNames();
publicvoiditemStateChanged(ItemEvente)
{
Stringname=list.getSelectedItem();
Fontf=newFont(name,Font.PLAIN,15);
area.setFont(f);
}
文本编辑器要实现对字体的设置,我选用了GraphicsEnvironment对象调用String[]getAvailableFontFamilyNames()方法,该方法可以获取计算机上所有可用的字体名称,并存放到字符串数组中。
4)字形,字体大小部分
elseif(e.getSource()==item8)//设置字形(常规,倾斜,加粗)
{
Fontfont=area.getFont();
intstyle=font.getStyle();
style=style^0;
area.setFont(newFont("",style,font.getSize()));
}
elseif(e.getSource()==item9)
{
Fontfont=area.getFont();
intstyle=font.getStyle();
style=style^2;
area.setFont(newFont("",style,font.getSize()));
}
elseif(e.getSource()==item10)
{
Fontfont=area.getFont();
intstyle=font.getStyle();
style=style^1;
area.setFont(newFont("",style,font.getSize()));
}
elseif(e.getSource()==item11)//设置字体大小
{
Fontfont=area.getFont();
intstyle=font.getStyle();
area.setFont(newFont(font.getName(),style,12));
}
elseif(e.getSource()==item12)
{
Fontfont=area.getFont();
intstyle=font.getStyle();
area.setFont(newFont(font.getName(),style,24));
}
elseif(e.getSource()==item13)
{
Fontfont=area.getFont();
intstyle=font.getStyle();
area.setFont(newFont(font.getName(),style,36));
}
5)剪切,复制,粘贴部分
publicvoidchangedUpdate(DocumentEvente)
{
Strings=area.getText();
}
publicvoidremoveUpdate(DocumentEvente)
{
changedUpdate(e);
}
publicvoidinsertUpdate(DocumentEvente)
{
changedUpdate(e);
}
publicvoidactionPerformed(ActionEvente)
{
elseif(e.getSource()==item2)
{
area.cut();
}
elseif(e.getSource()==item3)
{
area.copy();
}
elseif(e.getSource()==item4)
{
area.paste();
}
}
文本编辑器中关于剪切,复制,粘贴功能的实现我选用处理JTextArea的DocumentEvent事件,通过area.cut(),area.copy(),area.paste()方法,点击“编辑”中相应菜单项可以选择将文本区中选中的内容剪切,复制,粘贴。
6)帮助中关于主题部分
elseif(e.getSource()==item6)
{
zhutizt=newzhuti();
}
classzhutiextendsFrameimplementsActionListener
{
Buttonbtn;
Labellab;
zhuti()
{
setLayout(null);
btn=newButton("确定");
lab=newLabel("这是一个简单的文本编辑器!
");
add(btn);
add(lab);
btn.addActionListener(this);
setBounds(200,200,250,150);
setVisible(true);
lab.setBounds(20,60,220,30);
lab.setFont(newFont("楷体",Font.BOLD,16));
lab.setBackground(Color.cyan);
btn.setBounds(100,100,50,30);
btn.setBackground(Color.cyan);
}
publicvoidactionPerformed(ActionEvente)
{
if(e.getSource()==btn)
{
dispose();
}
}
}
对于帮助中关于主题部分的实现,我另构建了一个Frame框架,主要是由一个标签及一个按钮构成,由标签输出“这是一个简单的文本编辑器!
”,按钮用dispose()方法实现退出功能。
3.2主要类图
图3.1系统类图
4具体代码实现(主要源代码)
importjava.awt.*;
importjava.awt.event.*;
importjava.io.*;
importjavax.swing.JColorChooser;
importjavax.swing.*;
importjavax.swing.event.*;
classWindowextendsFrameimplementsActionListener,ItemListener,DocumentListener
{
FileDialogfiledialog_save,filedialog_load;
MenuBarmenubar;
Menumenu1,menu2,menu3,menu4,menu5,menu6;
MenuItemitemSave,itemLoad,item1,item2,item3,item4,item5,item6,item7,item8,item9,item10,item11,item12,item13,item14,item15;
Choicelist;
JTextAreaarea;
BufferedReaderin;
FileReaderfile_reader;
BufferedWriterout;
FileWritertofile;
JScrollPanescrollpane;
Window(Strings)
{
super(s);
setSize(600,400);
list=newChoice();
area=newJTextArea();setVisible(true);
GraphicsEnvironmentge=GraphicsEnvironment.getLocalGraphicsEnvironment();
StringfontName[]=ge.getAvailableFontFamilyNames();
for(inti=0;i{
list.add(fontName[i]);
}
add(list,"North");
add(area,"Center");
list.addItemListener(this);
validate();
menubar=newMenuBar();menu1=newMenu("文件");
menu2=newMenu("编辑");menu3=newMenu("格式");
menu4=newMenu("帮助");menu5=newMenu("字形");
menu6=newMenu("字体大小");
itemSave=newMenuItem("保存");
itemLoad=newMenuItem("打开");
item1=newMenuItem("新建");
item2=newMenuItem("剪切");
item3=newMenuItem("复制");
item4=newMenuItem("粘贴");
item5=newMenuItem("背景");
item6=newMenuItem("关于主题");
item7=newMenuItem("退出");
item8=newMenuItem("常规");
item9=newMenuItem("倾斜");
item10=newMenuItem("加粗");
item11=newMenuItem("12");
item12=newMenuItem("24");
item13=newMenuItem("36");
item14=newMenuItem("查找");
item15-newMenuItem("替换");
itemSave.addActionListener(this);
itemLoad.addActionListener(this);
item1.addActionListener(this);
item2.addActionListener(this);
item3.addActionListener(this);
item4.addActionListener(this);
item5.addActionListener(this);
item6.addActionListener(this);
item7.addActionListener(this);
item8.addActionListener(this);
item9.addActionListener(this);
item10.addActionListener(this);
item11.addActionListener(this);
item12.addActionListener(this);
item13.addActionListener(this);
item14.addActionListener(this);
item15.addActionListener(this);
(area.getDocument()).addDocumentListener(this);
menu1.add(item1);menu1.addSeparator();
menu1.add(itemSave);menu1.addSeparator();
menu1.add(itemLoad);menu1.addSeparator();
menu1.add(item7);
menu2.add(item2);menu2.addSeparator();
menu2.add(item3);menu2.addSeparator();
menu2.add(item4);menu2.addSeparator();
menu2.add(item14);menu2.addSeparator();
menu2.add(item15);
menu3.add(item5);menu3.addSeparator();
menu3.add(menu5);menu3.addSeparator();
menu3.add(menu6);
menu4.add(item6);
menu5.add(item8);menu5.addSeparator();
menu5.add(item9);menu5.addSeparator();
menu5.add(item10);
menu6.add(item11);menu6.addSeparator();
menu6.add(item12);menu6.addSeparator();
menu6.add(item13);
menubar.add(menu1);
menubar.add(menu2);
menubar.add(menu3);
menubar.add(menu4);
setMenuBar(menubar);
filedialog_save=newFileDialog(this,"保存文件对话框",FileDialog.SAVE);
filedialog_save.setVisible(false);
filedialog_load=newFileDialog(this,"保存文件对话框",FileDialog.LOAD);
filedialog_load.setVisible(false);
filedialog_s