package SwingPra;import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;import javax.swing.JDesktopPane;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;public class TextEditor extends JFrame {
JDesktopPane desktopPane; JMenuBar menubar;
JMenu fileMenu, helpMenu;
JMenuItem newItem, openItem, saveItem, othersaveItem, closeItem, exitItem; JMenuItem aboutItem;
StringBuffer buffer = new StringBuffer();
File currentFile;
int status;
DisplayFrame currentFrame; public TextEditor() {
super("文本编辑器");
Container container = getContentPane();
desktopPane = new JDesktopPane();
container.add(desktopPane);
createMenu();
setJMenuBar(menubar);
} public void createMenu() {
menubar = new JMenuBar();
fileMenu = new JMenu("文件");
newItem = new JMenuItem("新建");
newItem.addActionListener(new NewFileListener());
openItem = new JMenuItem("打开");
openItem.addActionListener(new OpenFileListener());
saveItem = new JMenuItem("保存");
saveItem.addActionListener(new SaveFileListener());
othersaveItem = new JMenuItem("另存为");
othersaveItem.addActionListener(new OtherSaveFileListener());
closeItem = new JMenuItem("关闭");
closeItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {
if (e.getSource() == closeItem) {
currentFrame.dispose();
}
}
}); exitItem = new JMenuItem("退出");
exitItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
fileMenu.add(newItem);
fileMenu.add(openItem);
fileMenu.addSeparator();
fileMenu.add(saveItem);
fileMenu.add(othersaveItem);
fileMenu.addSeparator();
fileMenu.add(closeItem);
fileMenu.add(exitItem); helpMenu = new JMenu("帮助");
aboutItem = new JMenuItem("关于");
aboutItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (e.getSource() == aboutItem) {
JOptionPane.showMessageDialog(null, "TextEditor 1.1", "版本",
JOptionPane.INFORMATION_MESSAGE);
}
}
}); helpMenu.add(aboutItem);
menubar.add(helpMenu);
menubar.add(helpMenu);
} public File ChooseFile(int chooseMode) {
JFileChooser filechooser = new JFileChooser();
filechooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
int result = 0;
switch (chooseMode) {
case 1:
result = filechooser.showOpenDialog(filechooser);
break;
case 2:
result = filechooser.showSaveDialog(filechooser);
break;
}
if (result == filechooser.CANCEL_OPTION)
return null;
File fileName = filechooser.getCurrentDirectory();
return fileName;
} public void saveFile(File file, int saveMode) throws IOException {
File fileName = null;
switch (saveMode) {
case 0:
fileName = ChooseFile(2);
if (fileName.createNewFile() != true)
return;
break;
case 1:
fileName = file;
break;
default:
return;
}
currentFile = fileName;
if (fileName.exists()!= true)
return;
BufferedWriter input = new BufferedWriter(fileName);
input.write(buffer.toString(), 0, buffer.length() - 1);
System.err.println(buffer.length());
if (input != null)
input.close();
status = 1;
} public void showFile(File fileName, DisplayFrame contentFrame) {
try {
BufferedReader output = new BufferedReader(fileName);
String text;
buffer = new StringBuffer();
while ((text = output.readLine()) != null) {
buffer.append(text + "\n"); }
contentFrame.displayArea.setText(buffer.toString());
contentFrame.setTitle(fileName.getName());
output.close();
} catch (IOException e) {
JOptionPane.showMessageDialog(null, "错误发生!");
} catch (NullPointerException e) {
JOptionPane.showMessageDialog(null, "警告");
}
} public static void main(String[] args) {
TextEditor texteditor = new TextEditor();
texteditor.setSize(400, 300);
texteditor.setVisible(true);
texteditor.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
} class NewFileListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
DisplayFrame txtFrame = new DisplayFrame();
currentFrame = txtFrame;
txtFrame.setTitle("新建文件");
desktopPane.add(txtFrame);
status = 0;
}
} class OpenFileListener implements ActionListener { public void actionPerformed(ActionEvent arg0) {
File fileName = ChooseFile(1);
currentFile = fileName;
try {
if (fileName.exists()) {
DisplayFrame contentFrame = new DisplayFrame();
currentFrame = contentFrame;
desktopPane.add(contentFrame);
showFile(fileName, contentFrame);
}
status = 1;
} catch (Exception e) {
}
}
} class SaveFileListener implements ActionListener { public void actionPerformed(ActionEvent e) {
if(e.getSource() == saveItem) {
try {
saveFile(currentFile, status);
}catch(IOException gg) {
JOptionPane.showMessageDialog(null, "保存文件失败!");
}catch(Exception f) {

}
}
}

}

class OtherSaveFileListener implements ActionListener { public void actionPerformed(ActionEvent e) {
if (e.getSource() == othersaveItem) {
File fileName = chooseFile(2);
BufferedWriter output = null;
BufferedReader input = null;
try {
if (fileName.exists() != true) {
fileName.createNewFile();
} input = new BufferedReader(new FileReader(currentFile));
output = new BufferedWriter(new FileWriter(fileName));
String ch;
while ((ch = input.readLine()) != null) {
output.write(ch);
output.newLine();
}
input.close();
output.close();
currentFrame.dispose();
DisplayFrame contentFrame = new DisplayFrame();
desktopPane.add(contentFrame);
currentFrame = contentFrame;
currentFile = fileName;
showFile(fileFrame, contentFrame);
} catch (IOException ee) {
JOptionPane.showMessageDialog(null, "文件另存失败!");
}
}
}
} class DisplayFrame extends JInternalFrame implements DocumentListener {
JTextArea displayArea; public DisplayFrame() {
super("文本内容", true, true, true, true);
displayArea = new JTextArea(8, 30);
displayArea.getDocument().addDocumentListener(this);
getContentPane().add(displayArea);
pack();
setVisible(true); } public void changedUpdate(DocumentEvent e) { } public void insertUpdate(DocumentEvent e) {
StringBuffer buffer = new StringBuffer(displayArea.getText());
displayArea.setCaretPosition(displayArea.getDocument().getLength());
} public void removeUpdate(DocumentEvent e) {
StringBuffer buffer = new StringBuffer(displayArea.getText());
displayArea.setCaretPosition(displayArea.getDocument().getLength());
} }}

解决方案 »

  1.   

    这样?import java.awt.Container;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.FileInputStream;
    import java.io.OutputStreamWriter;
    import java.io.InputStreamReader;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;import javax.swing.JDesktopPane;
    import javax.swing.JFileChooser;
    import javax.swing.JFrame;
    import javax.swing.JInternalFrame;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    import javax.swing.JOptionPane;
    import javax.swing.JTextArea;
    import javax.swing.event.DocumentEvent;
    import javax.swing.event.DocumentListener;public class TextEditor extends JFrame {
    JDesktopPane desktopPane;JMenuBar menubar;
    JMenu fileMenu, helpMenu;
    JMenuItem newItem, openItem, saveItem, othersaveItem, closeItem, exitItem;JMenuItem aboutItem;
    StringBuffer buffer = new StringBuffer();
    File currentFile;
    int status;
    DisplayFrame currentFrame;public TextEditor() {
    super("文本编辑器");
    Container container = getContentPane();
    desktopPane = new JDesktopPane();
    container.add(desktopPane);
    createMenu();
    setJMenuBar(menubar);
    }public void createMenu() {
    menubar = new JMenuBar();
    fileMenu = new JMenu("文件");
    newItem = new JMenuItem("新建");
    newItem.addActionListener(new NewFileListener());
    openItem = new JMenuItem("打开");
    openItem.addActionListener(new OpenFileListener());
    saveItem = new JMenuItem("保存");
    saveItem.addActionListener(new SaveFileListener());
    othersaveItem = new JMenuItem("另存为");
    othersaveItem.addActionListener(new OtherSaveFileListener());
    closeItem = new JMenuItem("关闭");
    closeItem.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {
    if (e.getSource() == closeItem) {
    currentFrame.dispose();
    }
    }
    });exitItem = new JMenuItem("退出");
    exitItem.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {
    System.exit(0);
    }
    });
    fileMenu.add(newItem);
    fileMenu.add(openItem);
    fileMenu.addSeparator();
    fileMenu.add(saveItem);
    fileMenu.add(othersaveItem);
    fileMenu.addSeparator();
    fileMenu.add(closeItem);
    fileMenu.add(exitItem);helpMenu = new JMenu("帮助");
    aboutItem = new JMenuItem("关于");
    aboutItem.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
    if (e.getSource() == aboutItem) {
    JOptionPane.showMessageDialog(null, "TextEditor 1.1", "版本",
    JOptionPane.INFORMATION_MESSAGE);
    }
    }
    });helpMenu.add(aboutItem);
    menubar.add(helpMenu);
    menubar.add(helpMenu);
    }public File chooseFile(int chooseMode) {
    JFileChooser filechooser = new JFileChooser();
    filechooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
    int result = 0;
    switch (chooseMode) {
    case 1:
    result = filechooser.showOpenDialog(filechooser);
    break;
    case 2:
    result = filechooser.showSaveDialog(filechooser);
    break;
    }
    if (result == filechooser.CANCEL_OPTION)
    return null;
    File fileName = filechooser.getCurrentDirectory();
    return fileName;
    }public void saveFile(File file, int saveMode) throws IOException {
    File fileName = null;
    switch (saveMode) {
    case 0:
    fileName = chooseFile(2);
    if (fileName.createNewFile() != true)
    return;
    break;
    case 1:
    fileName = file;
    break;
    default:
    return;
    }
    currentFile = fileName;
    if (fileName.exists()!= true)
    return;
    BufferedWriter input = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName)));
    input.write(buffer.toString(), 0, buffer.length() - 1);
    System.err.println(buffer.length());
    if (input != null)
    input.close();
    status = 1;
    }public void showFile(File fileName, DisplayFrame contentFrame) {
    try {
    BufferedReader output = new BufferedReader(new InputStreamReader(new FileInputStream(fileName)));
    String text;
    buffer = new StringBuffer();
    while ((text = output.readLine()) != null) {
    buffer.append(text + "\n");}
    contentFrame.displayArea.setText(buffer.toString());
    contentFrame.setTitle(fileName.getName());
    output.close();
    } catch (IOException e) {
    JOptionPane.showMessageDialog(null, "错误发生!");
    } catch (NullPointerException e) {
    JOptionPane.showMessageDialog(null, "警告");
    }
    }public static void main(String[] args) {
    TextEditor texteditor = new TextEditor();
    texteditor.setSize(400, 300);
    texteditor.setVisible(true);
    texteditor.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }class NewFileListener implements ActionListener {
    public void actionPerformed(ActionEvent e) {
    DisplayFrame txtFrame = new DisplayFrame();
    currentFrame = txtFrame;
    txtFrame.setTitle("新建文件");
    desktopPane.add(txtFrame);
    status = 0;
    }
    }class OpenFileListener implements ActionListener {public void actionPerformed(ActionEvent arg0) {
    File fileName = chooseFile(1);
    currentFile = fileName;
    try {
    if (fileName.exists()) {
    DisplayFrame contentFrame = new DisplayFrame();
    currentFrame = contentFrame;
    desktopPane.add(contentFrame);
    showFile(fileName, contentFrame);
    }
    status = 1;
    } catch (Exception e) {
    }
    }
    }class SaveFileListener implements ActionListener {public void actionPerformed(ActionEvent e) {
    if(e.getSource() == saveItem) {
    try {
    saveFile(currentFile, status);
    }catch(IOException gg) {
    JOptionPane.showMessageDialog(null, "保存文件失败!");
    }catch(Exception f) {}
    }
    }}class OtherSaveFileListener implements ActionListener {public void actionPerformed(ActionEvent e) {
    if (e.getSource() == othersaveItem) {
    File fileName = chooseFile(2);
    BufferedWriter output = null;
    BufferedReader input = null;
    try {
    if (fileName.exists() != true) {
    fileName.createNewFile();
    }input = new BufferedReader(new FileReader(currentFile));
    output = new BufferedWriter(new FileWriter(fileName));
    String ch;
    while ((ch = input.readLine()) != null) {
    output.write(ch);
    output.newLine();
    }
    input.close();
    output.close();
    currentFrame.dispose();
    DisplayFrame contentFrame = new DisplayFrame();
    desktopPane.add(contentFrame);
    currentFrame = contentFrame;
    currentFile = fileName;
    showFile(fileName, contentFrame);
    } catch (IOException ee) {
    JOptionPane.showMessageDialog(null, "文件另存失败!");
    }
    }
    }
    }class DisplayFrame extends JInternalFrame implements DocumentListener {
    JTextArea displayArea;public DisplayFrame() {
    super("文本内容", true, true, true, true);
    displayArea = new JTextArea(8, 30);
    displayArea.getDocument().addDocumentListener(this);
    getContentPane().add(displayArea);
    pack();
    setVisible(true);}public void changedUpdate(DocumentEvent e) {}public void insertUpdate(DocumentEvent e) {
    StringBuffer buffer = new StringBuffer(displayArea.getText());
    displayArea.setCaretPosition(displayArea.getDocument().getLength());
    }public void removeUpdate(DocumentEvent e) {
    StringBuffer buffer = new StringBuffer(displayArea.getText());
    displayArea.setCaretPosition(displayArea.getDocument().getLength());
    }}}