Gestionar las preferencias del usuario

2309 vistas

La clase abstracta Preferences del package java.util.prefs permite guardar facilmente ciertos datos. Las implementaciones dependen del sistema (registros, SGBD, ficheros,...), pero es invisible al usuario. Se pueden definir varios niveles de preferencias. Estos son accesibles gracias a los métodos estáticos de la clase Preferences.

Niveles de Preferences

  • Preferences.systemRoot(): preferencias globales del sistema.
  • Preferences.systemNodeForPackage(Class c): preferencias del sistema para una clase dada.
  • Preferences.userRoot(): preferencias globales del usuario.
  • Preferences.userNodeForPackage(Class c): preferencias globales del usuario para una clase dada.

Las Preferences asocian a una llave (String) un valor. Podemos almacenar en las Preferences cualquier tipo primitivo. Veamos los métodos correspondientes a:

La lectura de Preferences



java
  1. Preferences prefs = Preferences.systemRoot();
  2. String unString = prefs.get("unaLlave","un valor por defecto si no hay valor");
  3. // también podemos recuperar otros tipos primitivos
  4. int unInt = prefs.getInt("llaveInt",123);
  5. // siempre tenemos que especificar un valor por defecto



La escritura de Preferences



java
  1. Preferences prefs = Preferences.systemRoot();
  2. prefs.put("llave","valor");
  3. prefs.putInt("llaveInt",456);



Un ejemplo completo de una ventana capaz de "memorizar" su posición, talla y estado (maximizado, minimizado,...)



java
  1. import java.awt.*;
  2. import java.awt.event.*;
  3. import javax.swing.*;
  4. import java.util.prefs.*; 
  5. public class TestPreferences extends JFrame{
  6.   Preferences prefs = Preferences.userNodeForPackage(TestPreferences.class); 
  7.   public TestPreferences(){
  8.       super("Test");
  9.       setEtatInitial(); 
  10.       addListeners();
  11.       setVisible(true);
  12.       setDefaultCloseOperation(EXIT_ON_CLOSE);
  13.   }
  14.   public void setEtatInitial(){
  15.       int x = prefs.getInt("x",200);
  16.       int y = prefs.getInt("y",200);
  17.       setLocation(x,y);
  18.       int w = prefs.getInt("w",200);
  19.       int h = prefs.getInt("h",200);
  20.       setSize(w,h);
  21.       int state = prefs.getInt("state",Frame.NORMAL);
  22.       setExtendedState(state);
  23.   }
  24.   public void addListeners(){
  25.       addWindowListener(new WindowAdapter(){
  26.         public void windowClosing(WindowEvent we){
  27.             prefs.putInt("state",getExtendedState());
  28.             setExtendedState(Frame.NORMAL);
  29.             Rectangle bounds = getBounds();
  30.             prefs.putInt("x",(int)bounds.getX());
  31.             prefs.putInt("y",(int)bounds.getY());
  32.             prefs.putInt("w",(int)bounds.getWidth());
  33.             prefs.putInt("h",(int)bounds.getHeight()); 
  34.         } 
  35.       });
  36.   }
  37.   public static void main(String[] args){
  38.       new TestPreferences(); 
  39.   }
  40. }