Java程序设计实验分析报告文本编辑器的设计与实现文档格式.docx
《Java程序设计实验分析报告文本编辑器的设计与实现文档格式.docx》由会员分享,可在线阅读,更多相关《Java程序设计实验分析报告文本编辑器的设计与实现文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
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);
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'
itemSaveas.setAccelerator(KeyStroke.getKeyStroke('
A'
itemQuit.setAccelerator(KeyStroke.getKeyStroke('
Q'
itemCut.setAccelerator(KeyStroke.getKeyStroke('
X'
itemCopy.setAccelerator(KeyStroke.getKeyStroke('
C'
itemPaste.setAccelerator(KeyStroke.getKeyStroke('
V'
setJMenuBar(menuBar);
privatebooleanisChanged()
if(lab.getText().equals("
))
returnfalse;
elsereturntrue;
publicvoidactionPerformed(ActionEvente)
intoption=-1;
if(e.getActionCommand().equals("
))option=0;
))option=1;
))option=2;
))option=3;
))option=4;
))option=5;
))option=6;
))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;
}
case1:
saveFile();
break;
case2:
saveFileAs();
case3:
closeFile();
case4:
Cut();
case5:
Copy();
case6:
Paste();
case7:
about();
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());
//若指定文件不存在
(file.exists()))
{saveFileAs();
{try
{//打开指定文件
BufferedWriterbuf=newBufferedWriter(newFileWriter(file));
//将文字编辑区的文字写入文件
buf.write(txt.getText());
buf.close();
//设置状态栏为未修改
lab.setText("
catch(IOExceptione)
JOptionPane.showMessageDialog
(this,e.toString(),"
写入文件失败"
}
privatevoidsaveFileAs()
{//显示对话框
intoption3=fileChooser.showSaveDialog(this);
//如果确认选择文件
if(option3==JFileChooser.APPROVE_OPTION)
{//取得选择的文件
Filefile=fileChooser.getSelectedFile();
//在标题栏上设置文件名称
setTitle(file.toString());
try
{//建立文件
file.createNewFile();
//进行文件保护
catch(IOExceptione)
{JOptionPane.showMessageDialog(this,e.toString(),"
无法建立文件"
privatevoidcloseFile()
//是否已保存文件
isChanged())dispose();
intoption=JOptionPane.showConfirmDialog
(this,"
文件已修改,是否保存?
JOptionPane.YES_NO_OPTION,JOptionPane.WARNING_MESSAGE,null);
switch(option)
caseJOptionPane.YES_NO_OPTION:
dispose();
privatevoidCut()
txt.cut();
lab.setText("
popUpMenu.setVisible(false);
privatevoidCopy()
txt.copy();
privatevoidPaste()
txt.paste();
privatevoidabout()
//显示对话框
JOptionPane.showOptionDialog(this,"
程序名称\n"
+"
JNotePad\n"
+
"
简介:
\n"
一个简单的文字编辑器\n"
关于JNotePad"
JOptionPane.DEFAULT_OPTION,
JOptionPane.INFORMATION_MESSAGE,null,null,null);
publicstaticvoidmain(Stringargs[]){
newMynote("
陆庆庆0706550220"
程序有代表性的输出结果及结果分析:
这是其中的几个画面截图。
这段程序可以执行简单的文字编辑,包括:
打开,保存,另存为,
关闭,复制,粘贴,剪切和关于,同时可以右键菜单和有状态栏。