保存 JTextPane,然后用 Java 打开它
Posted
技术标签:
【中文标题】保存 JTextPane,然后用 Java 打开它【英文标题】:Save JTextPane, and Open it Java 【发布时间】:2014-02-27 23:22:10 【问题描述】:我正在尝试使用 JFileChooser 保存文件,但我似乎无法真正保存它。 我尝试了几种不同的方法,但我希望用户能够保存在所需的位置。 当我点击“保存”按钮时,它说它已保存。但是当我试图找到该文件时,它不存在。
public class GUI extends JFrame implements ActionListener, DocumentListener
JMenuItem aapne;
JMenuItem lagre;
JMenuItem sok;
JMenuItem farge;
JMenuItem oversett;
JTextPane tekstomraadet;
JTextPane dir;
String fratekst;
String tiltekst;
String tekst;
DefaultListModel listmodel = new DefaultListModel();
JList liste = new JList(listmodel);
public GUI()
this.setSize(1000,500);
this.setLayout(null);
//Passord
passord pass = new passord();
pass.password = JOptionPane.showInputDialog(null, "Skriv inn et passord");
while(!(pass.password.equals("words")))
pass.password = JOptionPane.showInputDialog(null, "Skriv inn passordet på nytt");
//Liste
liste.setBounds(900,0,100,600);
liste.setBackground(Color.pink);
this.add(liste);
liste.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
listmodel.addElement("Hvit");
listmodel.addElement("Svart");
//Tekst
tekstomraadet = new JTextPane();
dir = new JTextPane();
tekstomraadet.setBounds(0, 0, 890, 600);
tekstomraadet.setContentType("text/html");
tekstomraadet.getDocument().addDocumentListener(this);
this.add(tekstomraadet);
//MENY
JMenuBar menuBar = new JMenuBar();
JMenu fil = new JMenu("Fil");
aapne = new JMenuItem("Åpne");
lagre = new JMenuItem("Lagre");
sok = new JMenuItem("Søk");
farge = new JMenuItem("Endre farge");
oversett = new JMenuItem("Oversett");
aapne.addActionListener(this);
lagre.addActionListener(this);
sok.addActionListener(this);
farge.addActionListener(this);
oversett.addActionListener(this);
fil.add(aapne);
fil.add(lagre);
fil.add(sok);
fil.add(farge);
fil.add(oversett);
menuBar.add(fil);
this.setJMenuBar(menuBar);
this.setVisible(true);
//OVERSETTING
public String oversett (String input)
input = input.replace(" en ", " 1 ");
input = input.replace(" to ", " 2 ");
input = input.replace(" tre ", " 3 ");
input = input.replace(" fire ", " 4 ");
input = input.replace(" fem ", " 5 ");
input = input.replace(" seks", " 6 ");
input = input.replace(" syv ", " 7 ");
input = input.replace(" åtte ", " 8 ");
input = input.replace(" ni ", " 9 ");
input = input.replace(" ti ", " 10 ");
return input;
public String Ord (String Ordene, String teksten)
teksten = teksten.replace(Ordene, "<font color=\"red\">"+Ordene+"</font>");
return teksten;
public String Ord2 (String Ordene, String teksten)
teksten = teksten.replace(Ordene, "<font color=\"WHITE\">"+Ordene+"</font>");
return teksten;
@Override
public void actionPerformed(ActionEvent e)
// TODO Auto-generated method stub
if(e.getSource().equals(farge))
if(liste.getSelectedValue().equals("Hvit"))
tekstomraadet.setBackground(Color.WHITE);
else if(liste.getSelectedValue().equals("Svart"))
tekstomraadet.setBackground(Color.BLACK);
String ord = tekstomraadet.getText();
String gammeltekst = tekstomraadet.getText();
String nytekst = Ord2(ord, gammeltekst);
tekstomraadet.setText(nytekst);
else if (e.getSource().equals(lagre))
JFileChooser filechooser = new JFileChooser();
filechooser.setDialogTitle("Spesifiser en fil for lagring");
int rVal = filechooser.showSaveDialog(GUI.this);
if(rVal == JFileChooser.APPROVE_OPTION)
File fileTosave = filechooser.getSelectedFile();
System.out.println("Save as file: " +fileTosave.getAbsolutePath());
try
FileOutputStream f = new FileOutputStream("hehe");
ObjectOutputStream o = new ObjectOutputStream(f);
catch (FileNotFoundException e1)
// TODO Auto-generated catch block
e1.printStackTrace();
catch (IOException e1)
// TODO Auto-generated catch block
e1.printStackTrace();
else if (e.getSource().equals(aapne))
JFileChooser c = new JFileChooser();
int rVal = c.showOpenDialog(GUI.this);
if (rVal == JFileChooser.APPROVE_OPTION)
tekstomraadet.setText(c.getSelectedFile().getName());
else if (e.getSource().equals(oversett))
fratekst = tekstomraadet.getText();
tiltekst = this.oversett(fratekst);
tekstomraadet.setText(tiltekst);
else if( e.getSource().equals(sok))
String ord = JOptionPane.showInputDialog(this, "Hvilket ord søker du etter?");
String gammeltekst = tekstomraadet.getText();
String nytekst = Ord(ord, gammeltekst);
tekstomraadet.setText(nytekst);
@Override
public void changedUpdate(DocumentEvent arg0)
// TODO Auto-generated method stub
@Override
public void insertUpdate(DocumentEvent arg0)
// TODO Auto-generated method stub
@Override
public void removeUpdate(DocumentEvent arg0)
// TODO Auto-generated method stub
如果我使用固定保存,它可以工作。但这只是打开一个文件的大量工作。
【问题讨论】:
1) 不要使用nullLayout
屏幕应该在不同的分辨率下工作 2) 不要在***类中实现接口,使其在可能是内部类的新类中 3) 遵循 java 代码约定,方法以小写开头,类以大写开头,都遵循驼峰式风格
请简化代码并告诉我们您已经尝试过简单的调试技术。请查看常见问题解答的asking a good question 部分以获取提示。
对不起代码。这是我在这里的第一个问题,下次我会改进它! :) 并感谢 nachokk 的回答。
【参考方案1】:
FileOutputStream f = new FileOutputStream("hehe");
ObjectOutputStream o = new ObjectOutputStream(f);
您从不使用任何 OutputStreams 进行编写。您需要写入 OutputStream,然后刷新然后关闭它。我相信关闭它(应该在 finally 块中完成)通常会刷新 OutputStream。
FileOutputStream f = new FileOutputStream("hehe");
ObjectOutputStream o = null;
try
o = new ObjectOutputStream(f);
while (objectsAreLeftToBeWritten)
// get next object and write with
// o.writeObject(nextObject);
catch(....)
// .... etc
finally
// if o is not null, close it
【讨论】:
或者使用try-with-resources,objectAreLeft
是什么意思?
@nachokk:他会遍历一些东西来写出所有的对象。当还有对象要写入时,获取下一个对象并写入流。以上是关于保存 JTextPane,然后用 Java 打开它的主要内容,如果未能解决你的问题,请参考以下文章