我正在尝试使用FileWriter和PrintWriter保存文本窗格中的内容。
// Save file
fileItem2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("Pressed menu item! Save");
jStyledTextPane.setText("Pressed menu item! Save");
}
});
我已经有了一个打开文件的方法,我正在尝试与文本窗格上显示的文本相同。这是我的完整代码:
public class CSC9V4TextEditor implements ActionListener {
private JStyledTextPane jStyledTextPane;
private JMenuBar menubar() {
// Initialising JMenu.
JMenuBar menubar = new JMenuBar();
// Creating the Menus.
JMenu filemenu = new JMenu("File");
filemenu.add(new JSeparator());
// Creating the sub Menus.
JMenuItem fileItem1 = new JMenuItem("Open");
JMenuItem fileItem2 = new JMenuItem("Save");
JMenuItem fileItem3 = new JMenuItem("Exit");
fileItem3.add(new JSeparator());
// Adding the sub Menus to the File menu.
filemenu.add(fileItem1);
filemenu.add(fileItem2);
filemenu.add(fileItem3);
// Adding the sub Menus to the Edit menu.
menubar.add(filemenu);
// Exit action
fileItem3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("Exit");
System.exit(0);
}
});
// open file
fileItem1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JFileChooser chooser = new JFileChooser();
Component parent = null;
int returnVal = chooser.showOpenDialog(parent);
if (returnVal == JFileChooser.APPROVE_OPTION) {
System.out.println("You chose to open this file: "
+ chooser.getSelectedFile().getName());
File file = chooser.getSelectedFile();
try {
BufferedReader br = null;
String sCurrentLine;
br = new BufferedReader(new FileReader(file
.getAbsoluteFile()));
while ((sCurrentLine = br.readLine()) != null) {
jStyledTextPane.read(br, null);
}
} catch (IOException e1) {
System.out.println("problem accessing file"
+ file.getAbsolutePath());
}
}
// jStyledTextPane.setText("You chose to open this file: "
// + chooser.getSelectedFile().getName());
}
});
// Save file
fileItem2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("Pressed menu item! Save");
jStyledTextPane.setText("Pressed menu item! Save");
}
});
return menubar;
}
private void initialiseGUI() {
// Create the frame.
JFrame frame = new JFrame("CSC9V4 Text Editor");
// Set the exit button.
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Adding the menu bar to the frame.
frame.setJMenuBar(menubar());
// Size the frame.
frame.setSize(600, 600);
// Show the frame.
frame.setVisible(true);
jStyledTextPane = new JStyledTextPane();
// Adding the JStyledTextPane to the frame.
frame.add(jStyledTextPane);
}
@SuppressWarnings("unused")
public static void main(String[] args) {
CSC9V4TextEditor TextEditor = new CSC9V4TextEditor();
}
public CSC9V4TextEditor() {
initialiseGUI();
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
}
}
要保存JTextPane
的内容,可以使用适当的序列化方式将serialize
和JTextPane
的DefaultStyledDocument
保存在文件中。当您想再次加载内容时,可以使用相同的deserialize
并将其显示在JTextPane
上。考虑下面给出的代码:
import javax.swing.*;
import javax.swing.text.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class SaveEditor extends JFrame implements ActionListener{
public static final String text = "As told by Wikipedian"
+"Java is a general-purpose, concurrent, class-based, object-oriented computer programming language."
+ "It is specifically designed to have as few implementation "
+ "dependencies as possible. It is intended to let application developers write once, run anywhere (WORA), "
+ "meaning that code that runs on one platform does not need to be recompiled to run on another. "
+ "Java applications are typically compiled to bytecode (class file) that can run on any Java virtual "
+ "machine (JVM) regardless of computer architecture. Java is, as of 2012, one of the most popular programming "
+ "languages in use, particularly for client-server web applications, with a reported 10 million users.";
JTextPane pane ;
DefaultStyledDocument doc ;
StyleContext sc;
JButton save;
JButton load;
public static void main(String[] args)
{
try
{
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
SaveEditor se = new SaveEditor();
se.createAndShowGUI();
}
});
} catch (Exception evt) {}
}
public void createAndShowGUI()
{
setTitle("TextPane");
sc = new StyleContext();
doc = new DefaultStyledDocument(sc);
pane = new JTextPane(doc);
save = new JButton("Save");
load = new JButton("Load");
JPanel panel = new JPanel();
panel.add(save);panel.add(load);
save.addActionListener(this);load.addActionListener(this);
final Style heading2Style = sc.addStyle("Heading2", null);
heading2Style.addAttribute(StyleConstants.Foreground, Color.red);
heading2Style.addAttribute(StyleConstants.FontSize, new Integer(16));
heading2Style.addAttribute(StyleConstants.FontFamily, "serif");
heading2Style.addAttribute(StyleConstants.Bold, new Boolean(true));
try
{
doc.insertString(0, text, null);
doc.setParagraphAttributes(0, 1, heading2Style, false);
} catch (Exception e)
{
System.out.println("Exception when constructing document: " + e);
System.exit(1);
}
getContentPane().add(new JScrollPane(pane));
getContentPane().add(panel,BorderLayout.SOUTH);
setSize(400, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public void actionPerformed(ActionEvent evt)
{
if (evt.getSource() == save)
{
save();
}
else if (evt.getSource() == load)
{
load();
}
}
private void save()//Saving the contents .
{
JFileChooser chooser = new JFileChooser(".");
chooser.setDialogTitle("Save");
int returnVal = chooser.showSaveDialog(this);
if(returnVal == JFileChooser.APPROVE_OPTION)
{
File file = chooser.getSelectedFile();
if (file != null)
{
FileOutputStream fos = null;
ObjectOutputStream os = null;
try
{
fos = new FileOutputStream(file);
os = new ObjectOutputStream(fos);
os.writeObject(doc);
JOptionPane.showMessageDialog(this,"Saved successfully!!","Success",JOptionPane.INFORMATION_MESSAGE);
}
catch (Exception ex)
{
ex.printStackTrace();
}
finally
{
if (fos != null)
{
try
{
fos.close();
}
catch (Exception ex){}
}
if (os != null)
{
try
{
os.close();
}
catch (Exception ex){}
}
}
}
else
{
JOptionPane.showMessageDialog(this,"Please enter a fileName","Error",JOptionPane.ERROR_MESSAGE);
}
}
}
private void load()//Loading the contents
{
JFileChooser chooser = new JFileChooser(".");
chooser.setDialogTitle("Open");
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
int returnVal = chooser.showOpenDialog(this);
if(returnVal == JFileChooser.APPROVE_OPTION)
{
File file = chooser.getSelectedFile();
if (file!= null)
{
FileInputStream fin = null;
ObjectInputStream ins = null;
try
{
fin = new FileInputStream(file);
ins = new ObjectInputStream(fin);
doc = (DefaultStyledDocument)ins.readObject();
pane.setStyledDocument(doc);
JOptionPane.showMessageDialog(this,"Loaded successfully!!","Success",JOptionPane.INFORMATION_MESSAGE);
}
catch (Exception ex)
{
ex.printStackTrace();
}
finally
{
if (fin != null)
{
try
{
fin.close();
}
catch (Exception ex){}
}
if (ins != null)
{
try
{
ins.close();
}
catch (Exception ex){}
}
}
}
else
{
JOptionPane.showMessageDialog(this,"Please enter a fileName","Error",JOptionPane.ERROR_MESSAGE);
}
}
}
}