微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 如何记住Swing GUI表单中的最后一个值?

我有一个用Swing制作的简单 Java GUI表单.它有一些文本输入和复选框,我希望它记住输入到这些输入的最后一个值.当然可以手动将它们保存到某个文件然后读取文件并填充输入,但我想知道是否有办法自动或多或少地执行此操作.谢谢

解决方法

根据应用程序的大小和数据量,可以选择序列化整个UI.

但是,当信息基本上被检索并存储在数据库中时,这可能是一个坏主意.在这种情况下,应该使用值对象和绑定,但对于一些简单的应用程序,其中UI独立于另一种持久化方式,您可以使用它.

当然,您无法直接修改序列化值,只需将其视为额外选项:

alt text http://img684.imageshack.us/img684/4581/capturadepantalla201001p.png

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

public class SwingTest {
    public static void main( String [] args ) {
        final JFrame frame = getFrame();
        frame.pack();        
        frame.setVisible( true );
        Runtime.getRuntime().addShutdownHook(new Thread() {
            public void run() {
                writetoFile( frame,"swingtest.ser");
            } 
        });
    }

    /**
     * Reads it serialized or create a new one if it doens't exists
     */ 
    private static JFrame getFrame(){
        File file = new File("swingtest.ser");
        if( !file.exists() ) {
            System.out.println("creating a new one");
            JFrame frame = new JFrame();
            JPanel panel = new JPanel();
            panel.add( new JLabel("Some test here:"));
            panel.add( new JTextField(10));
            frame.add( panel );
            return frame;
        } else {
            return ( JFrame ) readobjectFrom( file );
        }
    }

这里是读/写草图,这里有很大的改进空间.

/**
     * write the object to a file 
     */
    private static void writetoFile( Serializable s,String fileName ) {
        ObjectOutputStream oos = null;

        try {
            oos = new ObjectOutputStream( new FileOutputStream( new File( fileName )));
            oos.writeObject( s );    
        } catch( IOException ioe ){

        } finally {
            if( oos != null ) try {
                oos.close();
            } catch( IOException ioe ){}
        }

    }
    /**
     * Read an object from the file 
     */
    private static Object readobjectFrom( File f ) {
        ObjectInputStream ois = null;
        try {
            ois = new ObjectInputStream( new FileInputStream( f )) ;
            return ois.readobject();
        } catch( ClassNotFoundException cnfe ){
            return null;
        } catch( IOException ioe ) {
            return null;
        } finally {
            if( ois != null ) try {
                ois.close();
            } catch( IOException ioe ){}
        }
    }
}

原文地址:https://www.jb51.cc/java/239734.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐