Link Log

Una manera de perder el tiempo…

Reloj en Java

with 13 comments

Actualización: http://www.israelsc.mx/programacion/java/reloj-en-java/

Bueno, después de mucho mucho tiempo, aquí traigo de nuevo otro programa en Java, este programa solo es un simple reloj analógico (ya saben, esos que tienen manecillas).

Bueno, acá el reloj resultante:

Reloj en Java

Reloj en Java

Acá el código:

import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.swing.*;
import javax.swing.event.*;
import java.util.*;

public class RelojProyecto extends JFrame{
    public static void main(String[] args) {
        RelojProyecto app = new RelojProyecto();
        app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    Reloj Cara;

    public RelojProyecto() {
	super( "Reloj Proyecto" );
	setVisible( true );
	setResizable( false );
        Container content = this.getContentPane();
        content.setLayout(new BorderLayout());
        Cara = new Reloj();
        content.add(Cara, BorderLayout.CENTER);
        this.pack();

        Cara.start();
    }
}

class Reloj extends JPanel {

    private int horas;
    private int minutos;
    private int segundos;

    private static final int   espacio = 10;
    private static final float dosPi = (float)(2.0 * Math.PI);
    private static final float tresPi = (float)(3.0 * Math.PI);
    private static final float rad = (float)(Math.PI / 30.0);

    private int tamano;
    private int xCentro;
    private int yCentro;
    private BufferedImage muestra;
    private javax.swing.Timer t;

    public Reloj() {
        this.setPreferredSize(new Dimension(300,300));
        t = new javax.swing.Timer(1000,
              new ActionListener() {
                  public void actionPerformed(ActionEvent e) {
                      update();
                  }
              });
    }

    public void update() {
        this.repaint();
    }

    public void start() {
        t.start();
    }
    public void stop() {
        t.stop();
    }
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D)g;
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

        int ancho = getWidth();
        int alto = getHeight();
        tamano = ((ancho < alto) ? ancho : alto) - 2*espacio;
        xCentro = tamano/2 + espacio;
        yCentro = tamano/2 + espacio;

        if (muestra == null
                || muestra.getWidth() != ancho
                || muestra.getHeight() != alto) {

            muestra = (BufferedImage)(this.createImage(ancho, alto));
            Graphics2D gc = muestra.createGraphics();
            gc.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                                RenderingHints.VALUE_ANTIALIAS_ON);
            caraReloj(gc);
        }

        Calendar now = Calendar.getInstance();
        horas   = now.get(Calendar.HOUR);
        minutos = now.get(Calendar.MINUTE);
        segundos = now.get(Calendar.SECOND); 

        g2.drawImage(muestra, null, 0, 0);

        Manecillas(g);
    }

    private void caraReloj(Graphics g) {

        g.setColor(new Color(209, 234, 255));
        g.fillOval(espacio, espacio, tamano, tamano);
        g.setColor(Color.black);
        g.drawOval(espacio, espacio, tamano, tamano);

        for (int seg = 0; seg<60; seg++) {
            int inicio;
            if (seg%5 == 0) {
                inicio = tamano/2-10;
            } else {
                inicio = tamano/2-5;
            }
            diseno(g, xCentro, yCentro, rad*seg, inicio , tamano/2);
        }
    }

        private void Manecillas(Graphics g) {
        int radioSegundero = tamano/2;
        int radioMinutero = radioSegundero * 3/4;
        int radioHora   = radioSegundero/2;

        float fsegundos = segundos;
        float anguloSegundero = tresPi - (rad * fsegundos);
        diseno(g, xCentro, yCentro, anguloSegundero, 0, radioSegundero);

        float fminutos = (float)(minutos + fsegundos/60.0);
        float anguloMinutero = tresPi - (rad * fminutos);
        diseno(g, xCentro, yCentro, anguloMinutero, 0, radioMinutero);

        float fhours = (float)(horas + fminutos/60.0);
        float anguloHora = tresPi - (5 * rad * fhours);
        diseno(g, xCentro, yCentro, anguloHora, 0, radioHora);

	Font font = new Font("Arial", Font.BOLD, 16);
	g.setFont(font);
	g.drawString( "12", 140, 40 );
	g.drawString( "1", 205, 55 );
	g.drawString( "2", 245, 100 );
	g.drawString( "3", 265, 155 );
	g.drawString( "4", 245, 210 );
	g.drawString( "5", 205, 255 );
	g.drawString( "6", 145, 270 );
	g.drawString( "7", 90, 255 );
	g.drawString( "8", 45, 210 );
	g.drawString( "9", 25, 155 );
	g.drawString( "10", 45, 100 );
	g.drawString( "11", 80, 55 );
	Font font1 = new Font("Arial", Font.BOLD, 12);
	g.setFont(font1);
	g.drawString( "RELOJ", 130, 80 );
	g.drawString( "QUARTZ", 125, 220 );
    }

    private void diseno(Graphics g, int x, int y, double angulo, int minRadius, int maxRadius) {
        float sine   = (float)Math.sin(angulo);
        float cosine = (float)Math.cos(angulo);

        int dxmin = (int)(minRadius * sine);
        int dymin = (int)(minRadius * cosine);

        int dxmax = (int)(maxRadius * sine);
        int dymax = (int)(maxRadius * cosine);
        g.drawLine( x+dxmin, y+dymin, x+dxmax, y+dymax);
    }
}

Written by Link X

May 18, 2009 at 9:09 pm

Posted in Java

Tagged with ,

13 Responses

Subscribe to comments with RSS.

  1. gracias lo llevaba buscando un buen rato.

    boti

    July 8, 2009 at 12:48 pm

    • Esta muy bueno el post, una pregunta cual es el código para generar donde está el código fuente del programa del reloj del programa, esta muy estilizado.

      Ricardo

      July 26, 2009 at 7:24 am

      • Ese es todo el código, solo escribe en linea de comandos:

        javac RelojProyecto.java

        Y te compila todo, ejecuta RelojProyecto.class y ya tienes el reloj.

        Link X

        July 26, 2009 at 2:10 pm

      • Creo que no me entendiste, me referia a si usabas alguna hoja de estilo para presentar el código fuente del programa con ese scroll, esta muy original esa manera de presentar el código fuente del programa.

        Ricardo

        July 26, 2009 at 9:35 pm

  2. La presentación del código en WordPress esta mejor explicado aquí:

    http://support.wordpress.com/code/

    Solo sustituyes lo que quieres mostrar.

    Link X

    July 27, 2009 at 9:25 am

  3. Muchas Gracias, eso era lo que quería saber.

    gambitorey

    July 31, 2009 at 7:42 pm

  4. muy buen aporte gracias por subirlo, una pregunta como puedo colocar un reloj en una pagina de java, en el encabezado.

    Joanxx

    August 10, 2009 at 3:02 pm

  5. super me ayudaron con mi tarea

    heydi

    September 8, 2011 at 4:31 pm

  6. super me ayudaron con mi
    tarea

    heydi

    September 8, 2011 at 4:32 pm

  7. como hago para que se ajuste con la hora del sistema???? por que incia apartir de las 2:10 omas…. me ayudan…

    Nestor

    March 2, 2012 at 4:00 pm

  8. como lo pongo a correr des eclipse???

    adrian

    April 27, 2012 at 2:25 pm

  9. It’s hard to find educated people in this particular topic, however, you sound like you know what you’re talking about!
    Thanks

    Johnny

    February 19, 2013 at 2:03 am

  10. Hola a la hora de correrlo me sale error en consola:
    java.security.AccessControlException: acces denied(java.lang.RuntimePermission exit VM.0)

    Veo que a todos les corre de lo más normal

    No sé si alguien puede ayudarme a solucionarlo

    Omar

    February 11, 2014 at 2:37 pm


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: