Вы находитесь на странице: 1из 6

/* * Javier Abelln, 10 de octubre de 2004 * RelojModelo.java */ package chuidiang.ejemplos.reloj; import import import import import java.util.Observable; java.util.Observer; javax.swing.

Timer; java.awt.event.*; java.util.Date;

/** * Modelo de reloj utilizando javax.swing.Timer. */ 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()); } }); timer.start(); } /** * Main para prueba de esta clase. */ public static void main (String [] args) { RelojModeloSwing modelo = new RelojModeloSwing(); modelo.addObserver(new Observer() { public void update (Observable unObservable, Object dato) { System.out.println (dato); } }); // Espera de 10 segundos para que el programa no termine // inmediatamente try { Thread.currentThread().sleep (10000); } catch (Exception e) { } } }

/* * Javier Abelln, 10 de octubre de 2004 * reloj.java */ package chuidiang.ejemplos.reloj; import import import import import import import import javax.swing.JLabel; java.util.Observer; java.util.Observable; java.util.Date; java.awt.Dimension; javax.swing.SwingUtilities; javax.swing.SwingConstants; java.text.SimpleDateFormat;

/** * 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 this.setHorizontalAlignment((SwingConstants.CENTER)); // Suscripcin al cambio de fecha/hora en el modelo recibido. modelo.addObserver (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(java.util.Observable o, Object arg) { final Object fecha = arg; // Se actualiza en pantalla la fecha/hora. SwingUtilities.invokeLater (new Runnable() { public void run() { setText (format.format(fecha)); } }); } }); // Se da una dimension al JLabel. this.setPreferredSize(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 javax.swing.Timer. Se hace un reloj digital utilizando la * clase javax.swing.Timer */ package chuidiang.ejemplos.reloj; import javax.swing.JApplet; import chuidiang.ejemplos.reloj.RelojVisual; /** * Applet que visualiza un reloj utilizando javax.swing.Timer. */ 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 * RelojModelo.java */ package chuidiang.ejemplos.reloj; import import import import java.util.Timer; java.util.TimerTask; java.util.Date; java.util.Observable;

import java.util.Observer; /** * Modelo de reloj utilizando java.util.Timer */ public class RelojModeloUtil extends Observable { /** * Lanza un timer cada segundo. */ public RelojModeloUtil() { Timer timer = new Timer(); timer.scheduleAtFixedRate(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(); modelo.addObserver (new Observer() { public void update (Observable unObservable, Object dato) { System.out.println (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 * reloj.java */ package chuidiang.ejemplos.reloj; import javax.swing.JLabel; import java.util.Observer;

import import import import import import

java.util.Observable; java.util.Date; java.awt.Dimension; javax.swing.SwingUtilities; javax.swing.SwingConstants; java.text.SimpleDateFormat;

/** * 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 this.setHorizontalAlignment((SwingConstants.CENTER)); // Suscripcin al cambio de fecha/hora en el modelo recibido. modelo.addObserver (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(java.util.Observable o, Object arg) { final Object fecha = arg; // Se actualiza en pantalla la fecha/hora. SwingUtilities.invokeLater (new Runnable() { public void run() { setText (format.format(fecha)); } }); } }); // Se da una dimension al JLabel. this.setPreferredSize(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 java.util * Crea una ventana con un reloj digital dentro que se * actualiza cada segundo. */ package chuidiang.ejemplos.reloj; import javax.swing.JApplet; /** * Applet que visualiza un relog utilizando java.util.Timer */ 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); } }

Вам также может понравиться