1

JavaBeansの永続性メカニズムを使用してGUIをローカルディスクに保存したいと思います。私が直面した問題は、一度に2つのフレームを保存することです。これが私のコードです。

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;

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"));

    frame.setVisible(true);
}


public void registry(){

 Registry re = new Registry();
}

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 class Registry {

public Registry(){

    JFrame 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);

}
}

saveButtonを押したときに2つのフレームを同時に保存したい。これで、メインフレームのみを保存できます。この問題を解決するのを手伝ってください。どうもありがとう。

4

1 に答える 1

2

JFrameクラス内にはアクセスできないためRegistry、このクラスにゲッターを追加する必要があります。次に、Registry作成がに依存している場合、そのフレームを保存する前にActionListener、レジストリハンドルがインスタンス化されていることを確認する必要があります。コード内:re

に追加Registry

public JFrame getFrame() {
   return frame;
}

に追加BeansTest.save()

if (re.getFrame() != null) {
   encoder.writeObject(re.getFrame());
}

ここでのいくつかの変数は、グローバルスコープに移動する必要があります。私はあなたがこれらのビットを自分で理解することから利益を得ると思います。

于 2012-08-25T09:51:18.483 に答える