2010-01-11 20 views
6

Swing ile yapılmış basit bir Java GUI formum var. Bazı metin girişleri ve onay kutularına sahiptir ve bunların son değerlerini hatırlamasını istiyorum. Tabii ki bunları elle bir dosyaya kaydetmek ve daha sonra dosyayı okumak ve girişleri doldurmak mümkündür, ama bunu daha fazla veya daha az otomatik olarak yapmanın bir yolu olup olmadığını merak ediyorum. TeşekkürlerSwing GUI formundaki son değerler nasıl hatırlanır?

+0

Sadece Java seri kullanmayın! –

+0

@ Tom: neden tam olarak değil? – OscarRyz

cevap

2

bir seçenek olabilir bütün UI Dizgeleştirme uygulamanızın boyutu ve veri miktarına bağlı olarak. bilgi temelde zaten bir veritabanında alınır ve saklanır zaman

O olsa kötü bir fikir olabilir. Bu durumda değer nesneleri ve ciltleme kullanılmalıdır, ancak UI'nin başka bir kalıcı yöntemden bağımsız olduğu bazı basit uygulamalar için bunu kullanabilirsiniz. Tabii

, sadece fazladan bir seçenek olarak düşünün, doğrudan bu yüzden tefrika değerleri değiştiremez: Burada

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

alt text http://img684.imageshack.us/img684/4581/capturadepantalla201001p.png/Okuması taslak olarak yazmak, çok şey var oda iyileştirme için burada.

/** 
    * 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){} 
     } 
    } 
} 
0

Gerçekten değil. Değerleri bir dosyaya veya veritabanına kendinizin ısrarla sürdürmek zorundasınız.

5

Preferences API kullanılması tercih edilir.

Bu sistemde tercihlerini depolar, ancak bu ayrıntılar sizden gizlenen - Bunun yerine (platforma özel olan) uygulama ayrıntıları daha tercihlerinize yapısı ve değerleri odaklanır.

Bu API aynı makinede farklı kullanıcılar için farklı ayarlar sağlar.

+0

Bir deneyelim – Fluffy