文本编辑器课程设计.docx
《文本编辑器课程设计.docx》由会员分享,可在线阅读,更多相关《文本编辑器课程设计.docx(23页珍藏版)》请在冰点文库上搜索。
文本编辑器课程设计
1设计时间
2011年12月19日-2011年12月25日
2设计目的
文本编辑器的设计与实现
3设计任务
设计文本编辑器,实现打开、新建、保存一个文本文件;设置字体、字号、字型、对齐方式、背景、前景色、复制、粘贴、剪切、查找、替换等功能。
4设计内容
4.1需求分析
在科学技术飞速发展的今天,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。
应用JAVA技术实现学生学习实践是可行而必要的工作。
在社会生活中我们经常需要用电脑编写一些文档来保存文件,本课程设计是运用了JAVA软件开发工具开发的应用软件
4.2概要设计
4.2.1系统功能图
4.3详细设计
4.3.1系统流程图
4.4系统功能与实现
4.4.1类或包的加载
importjava.awt.*;
importjava.awt.event.*;
importjava.awt.datatransfer.*;
importjavax.swing.*;
importjava.io.*;
importjava.lang.*;
4.4.1构建菜单栏及其下拉菜单
//设置文件菜单及其菜单项
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(
newActionListener(){
publicvoidactionPerformed(ActionEventevent)
{
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())!
=null){
displayText.append(s+"\n");//将给定文本追加到文本域的当前文本(即把读的内容加入文本域)
}
f.close();
b.close();
}catch(IOExceptionex){}
}catch(FileNotFoundExceptionex){}
}
else{return;}
}
});
fileMenu.addSeparator();//加分隔线
//设置保存菜单项
JMenuItemsaveItem=newJMenuItem("保存(S)");
saveItem.setMnemonic('S');
fileMenu.add(saveItem);
saveItem.addActionListener(
newActionListener(){
publicvoidactionPerformed(ActionEventevent)
{fd.setFile("*.java");
fd.setMode(FileDialog.SAVE);
fd.setTitle("保存");
fd.show();
if(fd.getFile()!
=null){
Filefile=newFile(fd.getFile());
try{
PrintWriterpw=newPrintWriter(newFileOutputStream(file));
//1.5版本之前用这一句,之后可以用PrintWriterpw=newPrintWriter(file);
pw.print(displayText.getText());
//这一部分用于把textArea1中的内容打印到pw指定的文件file中去,file围在对话框中选定的文件
pw.flush();//刷新该流的缓冲,然后关闭该流
pw.close();
}catch(FileNotFoundExceptionex){ex.printStackTrace();}
}
else{return;}
}});
//设置另存为菜单项
JMenuItemsaveAsItem=newJMenuItem("另存为(Z)");
saveAsItem.setMnemonic('Z');
fileMenu.add(saveAsItem);
saveAsItem.addActionListener(
newActionListener(){
publicvoidactionPerformed(ActionEventevent)
{fd.setFile("*.java");
fd.setMode(FileDialog.SAVE);
fd.setTitle("另存为");
fd.show();
if(fd.getFile()!
=null){
Filefile=newFile(fd.getFile());
try{
PrintWriterpw=newPrintWriter(newFileOutputStream(file));
//1.5版本之前用这一句,之后可以用PrintWriterpw=newPrintWriter(file);
pw.print(displayText.getText());
//这一部分用于把textArea1中的内容打印到pw指定的文件file中去,file围在对话框中选定的文件
pw.flush();//刷新该流的缓冲,然后关闭该流
pw.close();
}catch(FileNotFoundExceptionex){ex.printStackTrace();}
}
else{return;}
}});
fileMenu.addSeparator();//加分隔线
//设置退出菜单项
JMenuItemexitItem=newJMenuItem("退出(X)");
exitItem.setMnemonic('x');
fileMenu.add(exitItem);
exitItem.addActionListener(
newActionListener(){
publicvoidactionPerformed(ActionEventevent)
{
System.exit(0);
}
}
);
bar.add(fileMenu);
/*-------------------------------------------------------------------------------------------------*/
//创建编辑菜单及其菜单项
JMenueditMenu=newJMenu("编辑(E)");
editMenu.setMnemonic('E');
//剪切菜单选项
JMenuItemcutItem=newJMenuItem("剪切(T)");
cutItem.setMnemonic('T');
editMenu.add(cutItem);
cutItem.addActionListener(
newActionListener(){
publicvoidactionPerformed(ActionEventevent){
selectText=displayText.getSelectedText();//取得选定的文本
intstart=displayText.getSelectionStart();//选定的文本的开始位置
intend=displayText.getSelectionEnd();//选定的文本的结束位置
displayText.replaceRange("",start,end);/*用指定替换文本替换指定开始位置与结束位置之间的文本。
这里指定替换文本为空,即为剪切了文本*/
}
}
);
//复制菜单选项
JMenuItemcopyItem=newJMenuItem("复制(C)");
copyItem.setMnemonic('C');
editMenu.add(copyItem);
copyItem.addActionListener(
newActionListener(){
publicvoidactionPerformed(ActionEventevent){
selectText=displayText.getSelectedText();//获得选中的内容,并保存在selectText里
}
}
);
//粘贴的实现
JMenuItempasteItem=newJMenuItem("粘贴(P)");
pasteItem.setMnemonic('P');
editMenu.add(pasteItem);
pasteItem.addActionListener(
newActionListener(){
publicvoidactionPerformed(ActionEventevent){
intposition=displayText.getCaretPosition();//获得鼠标当前位置
displayText.insert(selectText,position);//插入到鼠标当前位置
}
}
);
editMenu.addSeparator();//加分隔线
//替换的实现
JMenuItemswapItem=newJMenuItem("替换(R))");
swapItem.setMnemonic('R');
editMenu.add(swapItem);
swapItem.addActionListener(
newActionListener(){
publicvoidactionPerformed(ActionEventevent){
JPanelswapPanel=newJPanel();
JLabellookupLabel=newJLabel("要替换的内容");
JTextFieldinputText=newJTextField(10);
JLabelswapLabel=newJLabel("替换为:
");
JTextFieldchangetoText=newJTextField(10);
swapPanel.add(lookupLabel);
swapPanel.add(inputText);
swapPanel.add(swapLabel);
swapPanel.add(changetoText);
JOptionPane.showMessageDialog(null,swapPanel);
Stringtext=displayText.getText();//获得整个文本内容
StringchangeText=text.replaceFirst(inputText.getText(),changetoText.getText());//获得替换后的内容
displayText.setText(changeText);
}
}
);
//全部替换的实现
JMenuItemaswapItem=newJMenuItem("全部替换(Q))");
aswapItem.setMnemonic('Q');
editMenu.add(aswapItem);
aswapItem.addActionListener(
newActionListener(){
publicvoidactionPerformed(ActionEventevent){
JPanelswapPanel=newJPanel();
JLabellookupLabel=newJLabel("要替换的内容");
JTextFieldinputText=newJTextField(10);
JLabelswapLabel=newJLabel("替换为:
");
JTextFieldchangetoText=newJTextField(10);
swapPanel.add(lookupLabel);
swapPanel.add(inputText);
swapPanel.add(swapLabel);
swapPanel.add(changetoText);
JOptionPane.showMessageDialog(null,swapPanel);
Stringtext=displayText.getText();//获得整个文本内容
StringchangeText=text.replaceAll(inputText.getText(),changetoText.getText());//获得替换后的内容
displayText.setText(changeText);
}
}
);
editMenu.addSeparator();//加分隔线
//插入子菜单
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');
//自动换行的功能切换
JMenuItemchangeItem=newJMenuItem("自动换行(W)");
changeItem.setMnemonic('W');
formatMenu.add(changeItem);
changeItem.addActionListener(
newActionListener(){
booleanvar=false;
publicvoidactionPerformed(ActionEventevent){
if(var)var=false;
elsevar=true;
displayText.setLineWrap(var);
}
}
);
//颜色菜单项
Stringcolors[]={"黑色","蓝色","红色","绿色"};
JMenucolorMenu=newJMenu("颜色(C)");
colorMenu.setMnemonic('C');
colorItems=newJRadioButtonMenuItem[colors.length];
colorGroup=newButtonGroup();
ItemHandleritemHandler=newItemHandler();
//创建颜色按钮监听器
for(intcount=0;countcolorItems[count]=
newJRadioButtonMenuItem(colors[count]);
colorMenu.add(colorItems[count]);
colorGroup.add(colorItems[count]);
colorItems[count].addActionListener(itemHandler);
}
//默认颜色
colorItems[0].setSelected(true);
//将颜色菜单项菜单加入菜单
formatMenu.add(colorMenu);
formatMenu.addSeparator();//加分隔线
//字体菜单项
JMenufontMenu=newJMenu("字体(n)");
fontMenu.setMnemonic('n');
fonts=newJRadioButtonMenuItem[fontNames.length];
fontGroup=newButtonGroup();
//创建字体按钮监听器
for(intcount=0;countfonts[count]=newJRadioButtonMenuItem(fontNames[count]);
fontMenu.add(fonts[count]);
fontGroup.add(fonts[count]);
fonts[count].addActionListener(itemHandler);
}
//默认字体
fonts[0].setSelected(true);
fontMenu.addSeparator();
//设置风格菜单
styleItems=newJCheckBoxMenuItem[styleNames.length];
for(intcount=0;countstyleItems[count]=
newJCheckBoxMenuItem(styleNames[count]);
fontMenu.add(styleItems[count]);
StyleHandlerstyleHandler=newStyleHandler();
styleItems[count].addItemListen