0

入力したデータを永続化できないという問題に直面しました。java Swing GUIをXMLファイルに保存し、後で再利用したいと思います。これで、GUIを正常に保存できます。しかし、テキストフィールドにデータを入力した後。入力したデータをXMLファイルにエンコードすることはできません。GUIと入力されたコンテンツの両方を保存するのを手伝ってもらえますか?以下は、javabeansXMLencoderを使用したコードです。

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSeparator;
import javax.swing.JTextField;
import javax.swing.JTextPane;
import java.beans.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;


public class ResourceName extends JFrame implements ActionListener{
static JFileChooser chooser;
JButton save,load;
JTextField  tf; 
static JFrame frame;
 public ResourceName(){

     chooser = new JFileChooser();
     chooser.setCurrentDirectory(new File("."));

     frame = new JFrame("ResourceName");
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     frame.setLayout(new FlowLayout());
     save = new JButton("Save");
     save.setActionCommand("Save");
     save.addActionListener(this);

     load = new JButton("Load");
     load.setActionCommand("Load");
     load.addActionListener(this);
     tf = new JTextField(10);

     frame.add(save);
     frame.add(tf);
     frame.add(load);       

    frame.pack();
    frame.setVisible(true);
 }

  public void actionPerformed(ActionEvent e){

      if((e.getActionCommand()).equals("Save"))
      {
          save();
      }else if((e.getActionCommand()).equals("Load"))
      {
          load();
      }
  }


 public void save()
{
    if(chooser.showSaveDialog(null)==JFileChooser.APPROVE_OPTION)
    {
        try{
            File file = chooser.getSelectedFile();
            XMLEncoder encoder = new XMLEncoder(new FileOutputStream(file));
            encoder.writeObject(frame);
            encoder.close();
        }
        catch(IOException e)
        {
            JOptionPane.showMessageDialog(null, e);
        }
    }
}
  public void load()
{
    //show file chooser dialog
    int r = chooser.showOpenDialog(null);

    // if file selected, open
    if(r == JFileChooser.APPROVE_OPTION)
    {
        try
        {
          File file = chooser.getSelectedFile();
          XMLDecoder decoder = new XMLDecoder(new FileInputStream(file));
          decoder.readObject();
          decoder.close();
        }
        catch(IOException e)
        {
            JOptionPane.showMessageDialog(null, e);
        }
    }
}

public static void main(String[] args) {

    ResourceName test = new ResourceName();

}
}

この問題を解決するのを手伝ってください。どうもありがとう!

4

1 に答える 1

0

textプロパティが である可能性がありますtransient。これは、 によって自動的に出力に保存されないことを意味しますObjectOutputStream。おそらく、そのフィールドを明示的に記述する必要があります。

于 2012-10-26T16:09:36.920 に答える