java - 使用javaBeans Persistence机制保存java GUI

标签 java swing javabeans

我想使用 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);

}
}

我想在按下保存按钮时同时保存两帧。现在我只能保存主框架。请帮我解决这个问题。非常感谢。

最佳答案

由于 Registry 类中的 JFrame 不可访问,因此您需要向此类添加 getter。然后,鉴于 Registry 创建依赖于 ActionListener,您需要在保存 re 之前检查注册表句柄 re 是否已实例化< em>那个框架。在代码中:

添加到注册表:

public JFrame getFrame() {
   return frame;
}

添加到BeansTest.save():

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

这里的一些变量需要移至全局范围。我认为您会从自己弄清楚这些内容中受益。

关于java - 使用javaBeans Persistence机制保存java GUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12120699/

相关文章:

java - JTable 和 JButton

java - 如何有效实现数据库功能?

java - 设置简单的struts 1.3项目,在ant范围内找不到bean

java - 如何在 JUnit 测试初始化​​时模拟 Bean 所需的文件

java - 出现异常.NoClassDefFoundError : com/itextpdf/text/log/CounterFactory

java - 使用 Glide 拉伸(stretch)图像以适应 ImageView

java - MQTT 应用程序使用单个客户端应用程序/库与两个代理连接

java - 与 spring 集成 dsl 作斗争

java - 了解事件调度威胁和 invokeLater() 方法

javascript - JSF f :ajax onevent not reading bean value