当前位置: 代码迷 >> Java相关 >> [求助] 请教一下记事本程序的保存功能如何实现
  详细解决方案

[求助] 请教一下记事本程序的保存功能如何实现

热度:133   发布时间:2006-12-29 21:33:14.0
[求助] 请教一下记事本程序的保存功能如何实现

和同学几个写了一个简单记事本java程序,望大虾给修改一下,有的功能不能实现,感觉越做越乱,都是初学者,一改老是出错,这个功能不知道怎么做“当点击新建、打开、退出等命令时,如果当前有打开的文件并且被改动过,则要提示用户是否保存修改。”这是老师布置的作业,求助各位大虾,帮忙修改一下吧
程序;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class TxtEdit2
{
public static void main(String args[])
{
MySimpleTextEditor editor=new MySimpleTextEditor();
editor.setSize(300,200);
editor.setVisible(true);
editor.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
System.exit(0);
}
});
}
}
class MySimpleTextEditor extends Frame
implements ActionListener
{
private MenuBar myBar=new MenuBar();
private Menu fileMenu, editMenu, cutMenu, aboutMenu;
private MenuItem cutItem, copyItem, pasteItem, selectAllItem;
private MenuItem recentcutItem, aboutItem;
private MenuItem quitItem, openItem, saveItem;
private TextArea mainWorkWindow=new TextArea(10,15);
private String placeHolder=" ";
private Vector recentCuts=new Vector();

public MySimpleTextEditor()
{ super("我的文本编辑器");
setLayout(new BorderLayout());
add("Center",mainWorkWindow);
setMenuBar(myBar);
initFileMenu();
initEditMenu();
initAboutMenu();
}
private void initEditMenu()
{
editMenu=new Menu("编辑");
myBar.add(editMenu);
cutItem=new MenuItem("剪切");
cutItem.addActionListener(this);
editMenu.add(cutItem);
copyItem=new MenuItem("复制");
copyItem.addActionListener(this);
editMenu.add(copyItem);
pasteItem=new MenuItem("粘贴");
pasteItem.addActionListener(this);
editMenu.add(pasteItem);
editMenu.addSeparator();
selectAllItem=new MenuItem("全选");
selectAllItem.addActionListener(this);
editMenu.add(selectAllItem);
editMenu.addSeparator();
cutMenu=new Menu("剪贴簿");
editMenu.add(cutMenu);
}
private void initFileMenu()
{
fileMenu=new Menu("文件");
myBar.add(fileMenu);
openItem=new MenuItem("打开");
openItem.addActionListener(this);
openItem.setEnabled(true);
fileMenu.add(openItem);
saveItem=new MenuItem("保存");
saveItem.addActionListener(this);
saveItem.setEnabled(true);
fileMenu.add(saveItem);
fileMenu.addSeparator();
quitItem=new MenuItem("退出");
quitItem.addActionListener(this);
fileMenu.add(quitItem);
}
private void initAboutMenu()
{
aboutMenu=new Menu("关于");
myBar.add(aboutMenu);
aboutItem=new MenuItem("关于");
aboutMenu.add(aboutItem);
aboutItem.addActionListener(this);
}
public void actionPerformed(ActionEvent e)
{
if(!(e.getSource() instanceof MenuItem))
return;
MenuItem m=(MenuItem)e.getSource();
if(m==quitItem)
{
dispose();
System.exit(0);
}
else if(m==cutItem)
{
placeHolder=mainWorkWindow.getSelectedText();
mainWorkWindow.replaceRange("",
mainWorkWindow.getSelectionStart(),
mainWorkWindow.getSelectionEnd());
addRecentCut(placeHolder);
}
else if (m==copyItem)
{
placeHolder=mainWorkWindow.getSelectedText();
}
else if (m==pasteItem)
{
mainWorkWindow.insert(placeHolder,mainWorkWindow.getCaretPosition());
}
else if (m==selectAllItem)
{
mainWorkWindow.selectAll();
}
else if (m==openItem)
{
Frame f=new Frame("FileDialog");
FileDialog d;
d=new FileDialog(f,"FileDialog");
d.setVisible(true);
String filename=d.getFile();
File openf=new File(filename);
String s="";
try
{
RandomAccessFile fr=new RandomAccessFile(d.getDirectory()+filename,"r");
byte[] buffer = new byte[4096];
int len;
while((len=fr.read(buffer))!=-1)
{
s = new String(buffer, 0, len);
mainWorkWindow.append(s+"\n");
}
fr.close();
}catch(Exception er){}

}
else if(m==saveItem)
{
Frame f=new Frame("FileDialog");
FileDialog d;
d=new FileDialog(f,"FileDialog");
d.setVisible(true);
String filename=d.getFile();
// File openf=new File(filename);
try
{
RandomAccessFile fw=new RandomAccessFile(d.getDirectory()+filename,"rw");
String s=mainWorkWindow.getText();
fw.writeChars(s);
fw.close();
}catch(Exception er){}
}
else if(m==aboutItem)
{

MyAboutDialog dlg = new MyAboutDialog(this, false);
dlg.show();
}
}
private class MyAboutDialog extends Dialog implements ActionListener{
Label label1 = new Label("2");
Label label2 = new Label("342");
Button Ok = new Button("确定");
Panel p = new Panel(new BorderLayout());
MyAboutDialog(Frame parent, boolean model){
super(parent, model);
setTitle("关于对话框");
setSize(300, 200);
setResizable(false);
setLayout(new BorderLayout());
p.add(BorderLayout.NORTH , label1);
p.add(BorderLayout.CENTER ,label2);
p.add(BorderLayout.SOUTH ,Ok);
Ok.setBounds(200,160, 50, 30);
add(p);
Ok.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
dispose();

}
}
private void addRecentCut(String cut)
{
recentCuts.insertElementAt(cut,0);
cutMenu.removeAll();
for(int i=0;i<recentCuts.size();i++)
{
MenuItem item=new MenuItem(
(String)recentCuts.elementAt(i));
cutMenu.add(item);
//item.addActionListener(this);
}
}
}

搜索更多相关的解决方案: 记事本  保存  

----------------解决方案--------------------------------------------------------
保存就是把当前的文档写入到文件中去

把java.io学好了再写也不迟
----------------解决方案--------------------------------------------------------

可是后天就要交了,这个程序可以实现保存,只是“当点击新建、打开、退出等命令时,如果当前有打开的文件并且被改动过,则要提示用户是否保存修改。”这要怎么做呀,拜托大虾帮忙改一下吧


----------------解决方案--------------------------------------------------------
监听事件,你也可以在打开的时候把内容保存起来,要关闭的时候,把当前内容和打开时读入的内容对比一下

如果一样,就直接关掉,如果不一样,就提示是否要保存

----------------解决方案--------------------------------------------------------

如何作判断呢?而且怎么让它提示是否要保存呢,我们改了改,加了新建,可是还是不知道怎么要提示是否保存,麻烦版主帮我改一下吧,明天就要交了,而且试验报告还要整理


----------------解决方案--------------------------------------------------------
我不太喜欢帮别人改代码

我希望我告诉你们一个方法,一个思路,然后你们自己去写.这样对你们才有所提高


我帮你写代码,对你是一点帮助都没有.

提示如下:
当你初次打开一个文档的时候,把这个文档的内容读进来,放到一个成员变量里面,不要去动它,当你点关闭窗体的时候,再一次得到当前文本框里面的内容,然后用这个内容和你刚读进来的内容相比较,如果不一样,则提示是否要保存,如果相同,直接关闭窗体
如果是新建的文档,那么就一定要提示是否保存

每次你主动点保存的的时候,都会把那个保存着原来内容的成员变量值改为最新的值.

应该很详细吧,就差没有编码了
你自己写写
----------------解决方案--------------------------------------------------------
还有,建议你把你的组件全部换成javax.swing里面的
也就是Frame变成JFrame,Menu->JMenu.......

这样性能会好一些
----------------解决方案--------------------------------------------------------
谢谢版主了,我再改改试试,麻烦你了
----------------解决方案--------------------------------------------------------
  相关解决方案