我想使用javabeans持久化机制将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;
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);
}
}
当我按下保存按钮时,我想同时保存两帧。现在我只能保存主框架。请帮我解决这个问题。非常感谢。
1条答案
按热度按时间esyap4oy1#
作为
JFrame
在Registry
类不可访问您需要向该类添加getter。那么,考虑到Registry
创造依赖于ActionListener
,则需要检查注册表句柄re
已在保存该帧之前示例化。在代码中:添加到
Registry
:添加到
BeansTest.save()
:这里的一些变量需要移到全局范围。我想你自己弄清楚这些东西会对你有好处的。