2010-01-11 9 views
6

Mam prosty formularz interfejsu GUI w języku Java utworzony za pomocą Swing. Ma kilka wejść tekstowych i pól wyboru i chcę, aby pamiętał ostatnie wartości do nich wprowadzone. Oczywiście możliwe jest ręczne zapisanie ich w jakimś pliku, a następnie odczytanie pliku i wypełnienie danych wejściowych, ale zastanawiam się, czy istnieje sposób, aby to zrobić mniej lub bardziej automatycznie. DziękiJak zapamiętać ostatnie wartości w formularzu GUI Swing?

+0

Po prostu nie używaj serializacji Java! –

+0

@Tom: dlaczego nie dokładnie? – OscarRyz

Odpowiedz

2

W zależności od wielkości aplikacji i ilości danych, serializacja całego interfejsu użytkownika może być opcjonalna.

To może być jednak zły pomysł, gdy informacje są pobierane i przechowywane w bazie danych. W takim przypadku należy używać obiektów wartości i powiązania, ale w przypadku niektórych prostych aplikacji, w których interfejs użytkownika jest niezależny od innego sposobu utrzymywania, można go użyć.

Oczywiście, nie można modyfikować wartości odcinkach bezpośrednio tak, po prostu uważają to jako dodatkową opcję:

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

oto odczytu/zapisu jako szkic, tam jest dużo możliwości poprawy tutaj.

/** 
    * 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

Niezupełnie. Musisz zająć się utrzymywaniem wartości w pliku lub bazie danych.

5

Preferowane jest użycie Preferences API.

Przechowuje preferencje w systemie, ale szczegóły są ukryte przed tobą - skupić się na strukturze i wartości własnych preferencji, a nie szczegółów implementacyjnych (które są specyficzne dla platformy).

Ten interfejs API umożliwia także różne ustawienia dla różnych użytkowników na tym samym komputerze.

+0

Spróbuję – Fluffy

Powiązane problemy