JAVA记事本,需要判断文本内容是否发生变化,判断新建按钮是否弹出“内容改变是否保存”对话框并保存
设置了DocumentListener。但是还是无法实现。import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
public class EditerFrame extends JFrame 
{
boolean flag = true;  
JPanel topPanel;
JPanel bottonPanel;
JPanel editorPanel;
JMenuItem fontItem; 
JScrollPane scroller;
JTextArea editor;
JDialog dialog;
String fileName;
fontDialog  myFontDialog=null;
final static int frameWidth=600;
final static int frameHeight=500;

public EditerFrame()
{
JFrame frame=new JFrame();
JMenuBar menuBar=new JMenuBar();
setJMenuBar (menuBar);
JMenu fileMenu=new JMenu("文件");
menuBar.add(fileMenu);
JMenu editMenu=new JMenu("编辑");
menuBar.add(editMenu);
JMenu formMenu=new JMenu("格式");
menuBar.add(formMenu);
JMenu helpMenu=new JMenu("帮助");
menuBar.add(helpMenu);
JMenuItem aboutItem=new JMenuItem("关于");
scroller=new JScrollPane();
editor=new JTextArea();
editor.setColumns(40);
editor.getDocument().addDocumentListener(new DocumentListener()
{ @Override  
public void changedUpdate(DocumentEvent e) {
flag = false;
} @Override
public void insertUpdate(DocumentEvent e) {
flag = false;

} @Override
public void removeUpdate(DocumentEvent e) {
flag = false;

}
});
aboutItem.addActionListener (new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
    JFrame jf1=new JFrame("关于");
    jf1.setBounds(200,200,500,100);
    jf1.setDefaultCloseOperation(jf1.DISPOSE_ON_CLOSE);
    jf1.setVisible(true);
    JLabel j1=new JLabel("组长:李宇欣,组员:刘俊利,许雅沁,李艳昭");
    jf1.add(j1);
}
});
helpMenu.add(aboutItem);
JMenuItem openItem=new JMenuItem("新建");
openItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{ if(flag=false){
int option = JOptionPane.showConfirmDialog(null,
       "文件已修改,是否保存?", "保存文件?", JOptionPane.YES_NO_OPTION,
       JOptionPane.WARNING_MESSAGE, null);
     switch (option) {
     case JOptionPane.YES_NO_OPTION: {
      saveFile();
      editor.setText("");
      break;
     }
     case JOptionPane.NO_OPTION:
      editor.setText("");
      break;
     }
}
editor.setText("");
}
});
fileMenu.add(openItem);
JMenuItem loadItem=new JMenuItem("打开");
loadItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
loadFile();
}
});
fileMenu.add(loadItem);

JMenuItem saveItem=new JMenuItem("保存");
saveItem.addActionListener (new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
saveFile();
}
});
fileMenu.add(saveItem);

JMenuItem saveAsItem=new JMenuItem("另存为");
saveAsItem.addActionListener (new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
saveAs();
}
});
fileMenu.add(saveAsItem);
fileMenu.addSeparator();
JMenuItem exitItem=new JMenuItem("退出");
exitItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.exit(0);
}
});
fileMenu.add(exitItem);

JMenuItem cutItem=new JMenuItem("剪切");
cutItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
cut();
}
});
editMenu.add(cutItem);

JMenuItem copyItem=new JMenuItem("复制");
copyItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
copy();
}
});
editMenu.add(copyItem);

JMenuItem pasteItem=new JMenuItem("粘贴");
pasteItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
paste();
}
});
editMenu.add(pasteItem);

JMenuItem scriptItem=new JMenuItem("字体");
scriptItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
script();
}
});
formMenu.add(scriptItem);

final JPopupMenu popup=new JPopupMenu();
JMenuItem jcutItem=new JMenuItem("剪切");
jcutItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
cut();
}
});
popup.add(jcutItem);
JMenuItem jcopyItem=new JMenuItem("复制");
jcopyItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
copy();
}
});
popup.add(jcopyItem);
JMenuItem jpasteItem=new JMenuItem("粘贴");
jpasteItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
paste();
}
});
popup.add(jpasteItem);
editor.addMouseListener(new MouseAdapter()
{
public void mouseReleased(MouseEvent event)
{
if(event.isPopupTrigger())
popup.show(event.getComponent(),event.getX(),event.getY());
}
});


scroller.getViewport().add(editor);
add(scroller);
setTitle("记事本");
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();            
     int screenWidth = screenSize.width;                    
     int screenHeight = screenSize.height;                  
setBounds((screenWidth-frameWidth)/2,(screenHeight-frameHeight)/2,frameWidth,frameHeight);
}
protected void script() {
// TODO Auto-generated method stub
myFontDialog =new fontDialog(this);
myFontDialog.setVisible(true);
if(myFontDialog.userSelect){
Font ff=myFontDialog.getFont();
editor.setFont(ff);
}
}
private void loadFile()
{
JFileChooser fc=new JFileChooser();
int returnVal=fc.showOpenDialog(this);
if(returnVal==JFileChooser.APPROVE_OPTION)
{
File file=fc.getSelectedFile();
if(file!=null){
fileName=file.getName();
}
try{
  File file1 = new File(fileName);
      FileReader readIn = new FileReader(file1);
      int size = (int)file1.length();
      int charsRead = 0;
      char[] content = new char[size];
      while(readIn.ready())
        charsRead += readIn.read(content, charsRead, size - charsRead);
      readIn.close();
      editor.setText(new String(content, 0, charsRead));
      flag=false;
}
catch(IOException e){ 
}
}
}
private void saveFile()
{
if(fileName!="" && fileName!=null)
{

try{
 File file = new File (fileName);
      FileWriter writeOut = new FileWriter(file);
      writeOut.write(editor.getText());
      writeOut.close();
      flag=false;

catch (IOException e)
{
e.printStackTrace();
}
}
else{
saveAs();
}
}
private void saveAs(){
JFileChooser fc=new JFileChooser();
int returnV[code=java]al=fc.showSaveDialog(this);
if(returnVal==JFileChooser.APPROVE_OPTION)
{
File file=fc.getSelectedFile();
fileName=file.getName();
try
{
editor.write(new FileWriter(file));
}
catch (IOException exp){
}
}
}
private void copy()
{
editor.copy();
editor.requestFocus();
}
private void paste()
{
editor.paste();
editor.requestFocus();
}
private void cut()
{
editor.cut();
editor.requestFocus();
}
}
}
import javax.swing.JFrame;
public class SimpleEditer
{
public static void main(String[] args) 
{
EditerFrame frame=new EditerFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}