/* * Javier Abelln, 10 de octubre de 2004 * [Link] */ package [Link]; import import import import import [Link]; [Link]; [Link].
Timer; [Link].*; [Link];
/** * Modelo de reloj utilizando [Link]. */ public class RelojModeloSwing extends Observable { /** * Lanza un timer cada segundo, avisando a los observadores de este * modelo del cambio. */ public RelojModeloSwing() { Timer timer = new Timer (1000, new ActionListener () { public void actionPerformed(ActionEvent e) { setChanged(); notifyObservers (new Date()); } }); [Link](); } /** * Main para prueba de esta clase. */ public static void main (String [] args) { RelojModeloSwing modelo = new RelojModeloSwing(); [Link](new Observer() { public void update (Observable unObservable, Object dato) { [Link] (dato); } }); // Espera de 10 segundos para que el programa no termine // inmediatamente try { [Link]().sleep (10000); } catch (Exception e) { } } }
/* * Javier Abelln, 10 de octubre de 2004 * [Link] */ package [Link]; import import import import import import import import [Link]; [Link]; [Link]; [Link]; [Link]; [Link]; [Link]; [Link];
/** * Visual para mostrar el reloj. * Es un JLabel que recibe un Observable de cambio de fecha. */ public class RelojVisual extends JLabel { /** * Se pasa un observable de fecha/hora. El Observable debe pasar un * Date a esta visual para que la presente. */ public RelojVisual(Observable modelo) { // La fecha/hora se pinta en el centro de este JLabel [Link](([Link])); // Suscripcin al cambio de fecha/hora en el modelo recibido. [Link] (new Observer () { // Mtodo al que el Observable llamar cuando se cambie // la fecha/hora. El arg se espera que sea un Date. public void update([Link] o, Object arg) { final Object fecha = arg; // Se actualiza en pantalla la fecha/hora. [Link] (new Runnable() { public void run() { setText ([Link](fecha)); } }); } }); // Se da una dimension al JLabel. [Link](new Dimension (200, 50)); }
/** * Cambia el formato de presentacion de la fecha/hora en pantalla. */ public void setFormat (SimpleDateFormat unFormato) { format = unFormato; } /** * Clase para mostrar una fecha/hora en formato texto. */ SimpleDateFormat format = new SimpleDateFormat ("dd/MM/yyyy hh:mm:ss"); }
/*APLETT * Javier Abelln, 10 Oct 2004 * * Ejemplo de uso de [Link]. Se hace un reloj digital utilizando la * clase [Link] */ package [Link]; import [Link]; import [Link]; /** * Applet que visualiza un reloj utilizando [Link]. */ public class AppletRelojSwing extends JApplet { /** * Crea el modelo y la visual del rejoj, metindolos en el applet. */ public void start() { RelojModeloSwing modelo = new RelojModeloSwing(); RelojVisual visual = new RelojVisual(modelo); getContentPane().add(visual); } } UTIL
/* * Javier Abelln, 10 de octubre de 2004 * [Link] */ package [Link]; import import import import [Link]; [Link]; [Link]; [Link];
import [Link]; /** * Modelo de reloj utilizando [Link] */ public class RelojModeloUtil extends Observable { /** * Lanza un timer cada segundo. */ public RelojModeloUtil() { Timer timer = new Timer(); [Link](timerTask, 0, 1000); } /** * main de prueba de esta clase. * No necesita una ventana para funcionar. */ public static void main (String [] args) { RelojModeloUtil modelo = new RelojModeloUtil(); [Link] (new Observer() { public void update (Observable unObservable, Object dato) { [Link] (dato); } }); } /** * Clase que se mete en Timer, para que se le avise cada segundo. */ TimerTask timerTask = new TimerTask() { /** * Mtodo al que Timer llamar cada segundo. Se encarga de avisar * a los observadores de este modelo. */ public void run() { setChanged(); notifyObservers(new Date()); } }; }
/* * Javier Abelln, 10 de octubre de 2004 * [Link] */ package [Link]; import [Link]; import [Link];
import import import import import import
[Link]; [Link]; [Link]; [Link]; [Link]; [Link];
/** * Visual para mostrar el reloj. * Es un JLabel que recibe un Observable de cambio de fecha. */ public class RelojVisual extends JLabel { /** * Se pasa un observable de fecha/hora. El Observable debe pasar un * Date a esta visual para que la presente. */ public RelojVisual(Observable modelo) { // La fecha/hora se pinta en el centro de este JLabel [Link](([Link])); // Suscripcin al cambio de fecha/hora en el modelo recibido. [Link] (new Observer () { // Mtodo al que el Observable llamar cuando se cambie // la fecha/hora. El arg se espera que sea un Date. public void update([Link] o, Object arg) { final Object fecha = arg; // Se actualiza en pantalla la fecha/hora. [Link] (new Runnable() { public void run() { setText ([Link](fecha)); } }); } }); // Se da una dimension al JLabel. [Link](new Dimension (200, 50)); } /** * Cambia el formato de presentacion de la fecha/hora en pantalla. */ public void setFormat (SimpleDateFormat unFormato) { format = unFormato; } /** * Clase para mostrar una fecha/hora en formato texto. */ SimpleDateFormat format = new SimpleDateFormat ("dd/MM/yyyy hh:mm:ss"); }
/*APPLET * Javier Abelln, 10 Oct 2004 * * Ejemplo de uso de un Timer de [Link] * Crea una ventana con un reloj digital dentro que se * actualiza cada segundo. */ package [Link]; import [Link]; /** * Applet que visualiza un relog utilizando [Link] */ public class AppletRelojUtil extends JApplet { /** * Crea un modelo de reloj y su visual, metindolos en el applet. */ public void start() { RelojModeloUtil modelo = new RelojModeloUtil(); RelojVisual visual = new RelojVisual(modelo); getContentPane().add(visual); } }