文本编辑器的设计与实现文档格式.docx
《文本编辑器的设计与实现文档格式.docx》由会员分享,可在线阅读,更多相关《文本编辑器的设计与实现文档格式.docx(26页珍藏版)》请在冰豆网上搜索。
打开
菜单
保存
新建
退出
另存为
文件
剪切
查找
复制
字体
字号
插入对象
替换
图4.2.1功能架构图
4.2.2程序主要组件概括
1.基本的Frame框架;
2.菜单;
3.打开文件对话框;
4.保存文件对话框;
5.颜色对话框;
6.Choice下拉列表,运来实现字体设置;
7.简单的帮助框架。
4.3详细设计
4.3.1文件打开与保存
文本编辑器的保存和打开功能的实现用文件对话框及输入输出流来完成。
先建立打开和保存对话框,在publicvoidactionPerformed(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(newWindowAdapter()
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()!
{
try{Filefile=new
File(filedialog_load.getDirectory(),
filedialog_load.getFile());
file_reader=newFileReader(file);
in=newBufferedReader(file_reader);
while((s=in.readLine())!
area.append(s+'
\n'
);
in.close();
file_reader.close();
}
catch(IOExceptione1){}
4.3.2字体,字形,字体大小的设置
文本编辑器要实现对字体的设置,选用了GraphicsEnvironment对象调用String[]getAvailableFontFamilyNames()方法,该方法可以获取计算机上所有可用的字体名称,并存放到字符串数组中。
Choicelist;
GraphicsEnvironmentge=GraphicsEnvironment.getLocalGraphicsEnvironment();
StringfontName[]=ge.getAvailableFontFamilyNames();
publicvoiditemStateChanged(ItemEvente)
{
Stringname=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(newFont("
"
style,font.getSize()));
elseif(e.getSource()==item9)
style=style^2;
elseif(e.getSource()==item10)
intstyle=font.getStyle();
style=style^1;
elseif(e.getSource()==item11)//设置字体大小
area.setFont(newFont(font.getName(),style,12));
elseif(e.getSource()==item12)
area.setFont(newFont(font.getName(),style,24));
elseif(e.getSource()==item13)
area.setFont(newFont(font.getName(),style,36));
4.3.3剪切,复制,粘贴设置
文本编辑器中关于剪切,复制,粘贴功能的实现选用处理JTextArea的DocumentEvent事件,通过area.cut(),area.copy(),area.paste()方法,点击“编辑”中相应菜单项可以选择将文本区中选中的内容剪切,复制,粘贴。
publicvoidchangedUpdate(DocumentEvente)
Strings=area.getText();
}
publicvoidremoveUpdate(DocumentEvente)
changedUpdate(e);
publicvoidinsertUpdate(DocumentEvente)
{
elseif(e.getSource()==item2)
area.cut();
elseif(e.getSource()==item3)
area.copy();
elseif(e.getSource()==item4)
area.paste();
4.3.4插入子菜单,删除子菜单,创建格式菜单及其菜单项
JMenuIteminsertItem=newJMenuItem("
插入文本(K)"
insertItem.setMnemonic('
K'
editMenu.add(insertItem);
insertItem.addActionListener(
newActionListener(){
publicvoidactionPerformed(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=newJMenuItem("
删除(G)"
RemoveItem.setMnemonic('
G'
editMenu.add(RemoveItem);
RemoveItem.addActionListener(newActionListener()
publicvoidactionPerformed(ActionEvente)
{intstart=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('
helpMenu.add(helpItem);
helpItem.addActionListener(
publicvoidactionPerformed(ActionEventevent){
JTextAreahelpText=newJTextArea(
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主要代码
importjava.awt.*;
importjava.awt.event.*;
importjava.awt.datatransfer.*;
importjavax.swing.*;
importjava.io.*;
importjava.lang.*;
publicclassNotepadextendsJFrame{
privatefinalColorcolorvalues[]=
{Color.black,Color.blue,Color.red,Color.green};
//定义颜色数组
StringstyleNames[]={"
Bold"
"
Italic"
};
//定义风格数组
StringfontNames[]={"
宋体"
华文行楷"
隶书"
//字体数组
String[]sizeString=newString[30];
//字号数组
int[]size=newint[30];
//与字号数组对应的字号整数,用于设置文字大小
privateJRadioButtonMenuItemcolorItems[],fonts[];
privateJCheckBoxMenuItemstyleItems[];
privateJTextAreadisplayText;
//定义文本编辑区
privateButtonGroupfontGroup,colorGroup;
//字体组,跟字色组
privateintstyle;
//字体风格
privateJScrollPanescroll;
//为文本编辑区提供滚动条
privateStringselectText="
;
//存放文本编辑区中选中的文本内容
privateJComboBoxstyleBox,fontBox,sizeBox;
//工具栏
privateJPaneltoolPanel;
//存放工具栏
privateintrowNumber=0;
privateFileDialogfd=newFileDialog(this);
//setupGUI
publicNotepad()
super("
记事本"
//创建菜单条
JMenuBarbar=newJMenuBar();
setJMenuBar(bar)
//设置文件菜单及其菜单项
JMenufileMenu=newJMenu("
文件(F)"
fileMenu.setMnemonic('
F'
//设置新建菜单项
JMenuItemnewItem=newJMenuItem("
新建(N)"
newItem.setMnemonic('
N'
fileMenu.add(newItem);
newItem.addActionListener(
newActionListener(){
publicvoidactionPerformed(ActionEventevent)
{displayText.setText("
}});
//设置打开菜单项
JMenuItemopenItem=newJMenuItem("
打开(O)"
openItem.setMnemonic('
O'
fileMenu.add(openItem);
openItem.addActionListener(
fd.setTitle("
打开"
//设置标题
fd.show();
if(fd.getFile()!
=null){
Filefile=newFile(fd.getFile());
//用从fd中取得的文件建立新文件,即打开的文件
displayText.setText("
try{
FileReaderf=newFileReader(file);
BufferedReaderb=newBufferedReader(f);
//按行读打开的文件,然后传入文本域
Strings;
try{
while((s=b.readLine())!
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(
publicvoidactionPerformed(ActionEventevent)
System.exit(0);
);
bar.add(fileMenu);
//剪切菜单选项
JMenuItemcutItem=newJMenuItem("
剪切(T)"
cutItem.setMnemonic('
T'
editMenu.add(cutItem);
cutItem.addActionListener(
selectText=displayText.getSelectedText();
//取得选定的文本
intstart=displayText.getSelectionStart();
//选定的文本的开始位置
intend=displayText.getSelectionEnd();
//选定的文本的结束位置
displayText.replaceRange("
start,end);
/*用指定替换文本替换指定
开始位置与结束位置之间的文本。
这里指定替换文本为空,即为剪切了文本*/
//复制菜单选项