1

これは、javabeans を使用して Java GUI を保存およびロードするコードです。

import java.awt.*;
import java.awt.event.*;
import java.beans.*;
import java.io.*;
import javax.swing.*;

public class BeansTest {
  private static JFileChooser chooser;
private JFrame frame;
Registry re;

public static void main(String[] args){
    chooser = new JFileChooser();
    chooser.setCurrentDirectory(new File("."));
    BeansTest test = new BeansTest();
    test.init();
}

public void init(){
    frame = new JFrame();
    frame.setLayout(new FlowLayout());
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setTitle("PersistentFrameTest");
    frame.setSize(400,200);

    JButton registryButton = new JButton("Registry");
    frame.add(registryButton);
    registryButton.addActionListener(EventHandler.create(ActionListener.class, this, "registry"));

    JButton saveButton = new JButton("Save");
    frame.add(saveButton);
    saveButton.addActionListener(EventHandler.create(ActionListener.class, this, "save"));

    JButton loadButton = new JButton("Load");
    frame.add(loadButton);
    loadButton.addActionListener(EventHandler.create(ActionListener.class, this, "load"));

    frame.setVisible(true);
}

public void registry(){

re = new Registry();
//re.getFrame();
}

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);
            if (re.getFrame() != null) {
                encoder.writeObject(re.getFrame());
            }
            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 class Registry {

JFrame frame;

public Registry(){

    frame = new JFrame();
    frame.setLayout(new FlowLayout());
    frame.setSize(400,200);

    JLabel nameL = new JLabel("Name:");
    JTextField nameF = new JTextField(8);

    frame.add(nameL);
    frame.add(nameF);


    frame.setVisible(true);

}
public JFrame getFrame(){

    return frame;
}
}

このプログラムには、メイン フレームとレジストリ フレームの 2 つのフレームがあります。これら 2 つのフレームを 1 つの XML ファイルに保存するためです。したがって、このファイルをロードすると、これら 2 つのフレームが同時に取得されます。私がやりたいことは、ユーザーが XML ファイルをロードしたときに、メイン フレームだけを取得することです。ユーザーが registryButton をクリックすると、2 番目のフレームが表示されます。これを実現するにはどうすればいいですか?

4

1 に答える 1

2

保存された各フレームを使用XMLDecoderすると、それらが書き込まれたのと同じ順序で読み戻されます。 の結果を割り当てて使用することを忘れないでくださいreadObject:

JFrame mainFrame = (JFrame) xmlDecoder.readObject();
mainFrame.setVisible(true);
于 2012-08-25T11:24:41.637 に答える