Java程序设计实验分析报告文本编辑器的设计与实现.docx
- 文档编号:5172202
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:13
- 大小:63.77KB
Java程序设计实验分析报告文本编辑器的设计与实现.docx
《Java程序设计实验分析报告文本编辑器的设计与实现.docx》由会员分享,可在线阅读,更多相关《Java程序设计实验分析报告文本编辑器的设计与实现.docx(13页珍藏版)》请在冰豆网上搜索。
Java程序设计实验分析报告文本编辑器的设计与实现
Java程序设计实验报告-文本编辑器的设计与实现
————————————————————————————————作者:
————————————————————————————————日期:
Java程序设计实验报告
学生姓名:
邵强
学号:
0706550222
课程编号:
06021801-0
实验名称:
文本编辑器的设计与实现
实验内容:
设计与实现一个文本编辑器,要求具有方便的图形用户界面,包括标题栏、菜单栏,菜单栏有相关的菜单和菜单项,有快捷键,具有编辑、打开、保存、复制、粘贴等功能(详细功能要求通过运行提供的字节码文件来确定,主类是JNotePadUI)。
完成有关类的设计,并调试运行,给出有代表性的程序输出结果(程序运行截图)。
程序代码如下:
packagenote;
importjava.awt.*;
importjava.awt.event.*;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileNotFoundException;
importjava.io.FileOutputStream;
importjava.io.FileWriter;
importjava.io.IOException;
importjava.io.*;
importjavax.swing.*;
publicclassMynoteextendsJFrameimplementsActionListener{
JMenumenuFile;JMenumenuEdit;JMenumenuAbout;
JPopupMenupopUpMenu;
JTextAreatxt=null;//编辑区
JLabellab=newJLabel("未修改");
JFileChooserfileChooser=newJFileChooser();
FilesaveFileName=null,fileName=null;
publicMynote(Strings)
{
super(s);
createMenuBar();//菜单栏
createContentPane();//文本编辑区组件
setBounds(100,100,600,450);
addWindowListener(newWindowAdapter(){
publicvoidwindowClosing(WindowEvente)
{closeFile();}});
setVisible(true);}
publicvoidcreateMenuBar(){
JMenuBarmenuBar=newJMenuBar();
menuFile=newJMenu("文件");
menuEdit=newJMenu("编辑");
menuAbout=newJMenu("关于");
menuBar.add(menuFile);
menuBar.add(menuEdit);
menuBar.add(menuAbout);
JMenuItemitemOpen=newJMenuItem("打开");
menuFile.add(itemOpen);
itemOpen.addActionListener(this);
menuFile.addSeparator();
JMenuItemitemSave=newJMenuItem("保存");
menuFile.add(itemSave);
itemSave.addActionListener(this);
JMenuItemitemSaveas=newJMenuItem("另存为");
menuFile.add(itemSaveas);
itemSaveas.addActionListener(this);
menuFile.addSeparator();
JMenuItemitemQuit=newJMenuItem("关闭");
menuFile.add(itemQuit);
itemQuit.addActionListener(this);
JMenuItemitemCut=newJMenuItem("剪切");
menuEdit.add(itemCut);
itemCut.addActionListener(this);
JMenuItemitemCopy=newJMenuItem("复制");
menuEdit.add(itemCopy);
itemCopy.addActionListener(this);
JMenuItemitemPaste=newJMenuItem("粘贴");
menuEdit.add(itemPaste);
itemPaste.addActionListener(this);
JMenuItemitemAboutnote=newJMenuItem("关于NotePad");
menuAbout.add(itemAboutnote);
itemAboutnote.addActionListener(this);
//右键菜单
JMenuItemCopyitem=newJMenuItem("复制");
Copyitem.addActionListener(this);
JMenuItemCutitem=newJMenuItem("剪切");
Cutitem.addActionListener(this);
JMenuItemPasteitem=newJMenuItem("粘贴");
Pasteitem.addActionListener(this);
popUpMenu=newJPopupMenu();
popUpMenu.add(Copyitem);
popUpMenu.add(Cutitem);
popUpMenu.add(Pasteitem);
//快捷键itemOpen.setAccelerator(KeyStroke.getKeyStroke('O',Event.CTRL_MASK,false));itemSave.setAccelerator(KeyStroke.getKeyStroke('S',Event.CTRL_MASK,false));
itemSaveas.setAccelerator(KeyStroke.getKeyStroke('A',Event.CTRL_MASK,false));
itemQuit.setAccelerator(KeyStroke.getKeyStroke('Q',Event.CTRL_MASK,false));
itemCut.setAccelerator(KeyStroke.getKeyStroke('X',Event.CTRL_MASK,false));
itemCopy.setAccelerator(KeyStroke.getKeyStroke('C',Event.CTRL_MASK,false));
itemPaste.setAccelerator(KeyStroke.getKeyStroke('V',Event.CTRL_MASK,false));
setJMenuBar(menuBar);
}
privatebooleanisChanged()
{
if(lab.getText().equals("未修改"))
returnfalse;
elsereturntrue;
}
publicvoidactionPerformed(ActionEvente)
{
intoption=-1;
if(e.getActionCommand().equals("打开"))option=0;
if(e.getActionCommand().equals("保存"))option=1;
if(e.getActionCommand().equals("另存为"))option=2;
if(e.getActionCommand().equals("关闭"))option=3;
if(e.getActionCommand().equals("剪切"))option=4;
if(e.getActionCommand().equals("复制"))option=5;
if(e.getActionCommand().equals("粘贴"))option=6;
if(e.getActionCommand().equals("关于NotePad"))option=7;
switch(option)
{
case0:
{
if(!
isChanged())
{open();}
else
{intoption2=JOptionPane.showConfirmDialog
(this,"文件已修改,是否保存?
","保存文件?
",JOptionPane.YES_NO_OPTION,JOptionPane.WARNING_MESSAGE,null);
switch(option2)
{
caseJOptionPane.YES_OPTION:
saveFile();//保存文件
break;
caseJOptionPane.NO_OPTION:
open();
break;
}
}
break;}
case1:
saveFile();break;
case2:
saveFileAs();break;
case3:
closeFile();break;
case4:
Cut();break;
case5:
Copy();break;
case6:
Paste();break;
case7:
about();break;
default:
break;
}
}
publicvoidcreateContentPane()//文本编辑区组件
{
JScrollPanescrollPane;//滑动条
txt=newJTextArea(10,30);
txt.setEditable(true);
txt.setFont(newFont("宋体",Font.PLAIN,18));
txt.setLineWrap(true);
scrollPane=newJScrollPane(txt);
add(scrollPane,BorderLayout.CENTER);
add(lab,BorderLayout.SOUTH);
txt.addKeyListener(newKeyAdapter(){
publicvoidkeyTyped(KeyEvente)
{lab.setText("已修改");}
});
txt.addMouseListener(newMouseAdapter(){
publicvoidmouseReleased(MouseEvente)
{
if(e.getButton()==MouseEvent.BUTTON3)
popUpMenu.show(e.getComponent(),e.getX(),e.getY());
}
publicvoidmouseClicked(MouseEvente)
{
if(e.getButton()==MouseEvent.BUTTON1)
popUpMenu.setVisible(false);
}
});
}
privatevoidopen()
{
intoption=fileChooser.showOpenDialog(this);
if(option==JFileChooser.APPROVE_OPTION)
{try
{//打开所选文件
BufferedReaderbuf=newBufferedReader(newFileReader(fileChooser.getSelectedFile()));
//设置文件标题
setTitle(fileChooser.getSelectedFile().toString());
//删除前一次文件
txt.setText("");
//设置状态栏
lab.setText("未修改");
//取得系统相依的换行符
StringlineSeparator=System.getProperty("line.separator");
//读取文件并附加至文字编辑区
Stringtext;
while((text=buf.readLine())!
=null)
{
txt.append(text);
txt.append(lineSeparator);
}
buf.close();
}
catch(IOExceptione)
{
JOptionPane.showMessageDialog
(this,e.toString(),"打开文件失败",JOptionPane.ERROR_MESSAGE);}}
}
privatevoidsaveFile()
{
//从标题栏取得文件名称
Filefile=newFile(getTitle());
//若指定文件不存在
if(!
(file.exists()))
{saveFileAs();}
else
{try
{//打开指定文件
BufferedWriterbuf=newBufferedWriter(newFileWriter(file));
//将文字编辑区的文字写入文件
buf.write(txt.getText());
buf.close();
//设置状态栏为未修改
lab.setText("未修改");
}
catch(IOExceptione)
{
JOptionPane.showMessageDialog
(this,e.toString(),"写入文件失败",JOptionPane.ERROR_MESSAGE);}
}
}
privatevoidsaveFileAs()
{//显示对话框
intoption3=fileChooser.showSaveDialog(this);
//如果确认选择文件
if(option3==JFileChooser.APPROVE_OPTION)
{//取得选择的文件
Filefile=fileChooser.getSelectedFile();
//在标题栏上设置文件名称
setTitle(file.toString());
try
{//建立文件
file.createNewFile();
//进行文件保护
saveFile();
}
catch(IOExceptione)
{JOptionPane.showMessageDialog(this,e.toString(),"无法建立文件",JOptionPane.ERROR_MESSAGE);
}
}
}
privatevoidcloseFile()
{
//是否已保存文件
if(!
isChanged())dispose();
else
{
intoption=JOptionPane.showConfirmDialog
(this,"文件已修改,是否保存?
","保存文件?
",
JOptionPane.YES_NO_OPTION,JOptionPane.WARNING_MESSAGE,null);
switch(option)
{
caseJOptionPane.YES_NO_OPTION:
saveFile();
caseJOptionPane.NO_OPTION:
dispose();
}
}
}
privatevoidCut()
{
txt.cut();
lab.setText("已修改");
popUpMenu.setVisible(false);
}
privatevoidCopy()
{
txt.copy();
popUpMenu.setVisible(false);
}
privatevoidPaste()
{
txt.paste();
lab.setText("已修改");
popUpMenu.setVisible(false);
}
privatevoidabout()
{
//显示对话框
JOptionPane.showOptionDialog(this,"程序名称\n"+"JNotePad\n"+
"简介:
\n"+"一个简单的文字编辑器\n",
"关于JNotePad",JOptionPane.DEFAULT_OPTION,
JOptionPane.INFORMATION_MESSAGE,null,null,null);
}
publicstaticvoidmain(Stringargs[]){
newMynote("陆庆庆0706550220");
}
}
程序有代表性的输出结果及结果分析:
这是其中的几个画面截图。
这段程序可以执行简单的文字编辑,包括:
打开,保存,另存为,
关闭,复制,粘贴,剪切和关于,同时可以右键菜单和有状态栏。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 程序设计 实验 分析 报告 文本 编辑器 设计 实现