Welcome, guest! Login / Register - Why register?
Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)

Paste

Pasted as Java by registered user KistIndigo ( 15 years ago )
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package proyecto;

/**
 * Reloj utilizando graficas de bajo nivel
 * @author pedro
 */
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Calendar;
import java.util.GregorianCalendar;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Main extends Canvas implements Runnable {

    public static final int width = 800;//Estas dos constantes me permiten determinar el tamaño de la ventana
    public static final int height = 600;
    public int hora = 0, min = 0, sec = 0;//Estas 3 variables serán las que guardarán la hora, los minutos y los segundos
    public static final int[] codigo = new int[60];//Aqui se guarda la posición en X de los numeros correspondientes a los minutos y los segundos
    public static final boolean ejeX = true;//Las constantes sirven para pasarlas como parametro a un metodo más tarde
    public static final boolean ejeY = false;
    public static final int SPEED = 50;//La velocidad del bucle principal

    public Main() {
        JFrame ventana = new JFrame("Ventana Principal");//Crea la ventana
        JPanel panel = (JPanel) ventana.getContentPane();//Crear panel dentro de la ventana
        setBounds(0, 0, width, height);
        panel.setPreferredSize(new Dimension(width, height));
        panel.setLayout(null);
        panel.add(this);//Preparar el panel para controlarlo a bajo nivel
        Thread hilo = new Thread(this);//Hilo que llevará el bucle principal
        hilo.start();
        ventana.setBounds(0, 0, width, height);
        ventana.setVisible(true);
        ventana.addWindowListener(new WindowAdapter() {//Esto permite que el boton cerrar cierre la ventana

            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
/*
 * Este metodo captura la hora del sistema
 */
    public void updateTime() {
        Calendar calendario = new GregorianCalendar();
        hora = calendario.get(Calendar.HOUR_OF_DAY);
        min = calendario.get(Calendar.MINUTE);
        sec = calendario.get(Calendar.SECOND);
    }

    public void paint(Graphics g) {
        g.setColor(getBackground());//Esto toma el color de fondo predefnido para la ventana
        g.fillRect(0, 0, width, height);//Dibuja un cuadrado que ocupa toda la ventana del color previamente seleccionado
        int cont = 0;//Contador del ciclo While más adelante
        g.setColor(Color.BLACK);
        g.fillRect(8, 8, 604, 404);//Dibuja un cuadro del color negro, el previamente seleccionado
        g.setColor(Color.red);
        g.fillRect(10, 10, 600, 400);//Dibuja el fondo de color Rojo, el previamente seleccionado
        g.setColor(Color.black);
        g.drawString("Horas", 10, 20);//Dbuja las palabras Horas Minutos y Segundos de color Negro
        g.drawString("Minutos", 10, 90);
        g.drawString("Segundos", 10, 160);
        g.setColor(Color.WHITE);
        g.fillRect(getPosHora(), 28, 20, 15);//Dibuja el cuadrito que indica la hora
        g.fillRect(getPosicion(Calendar.MINUTE, ejeX), getPosicion(Calendar.MINUTE, ejeY), 20, 15); //Dibuja el cuadrito que indica los minutos
        g.fillRect(getPosicion(Calendar.SECOND, ejeX), getPosicion(Calendar.SECOND, ejeY), 20, 15);//Dibuja el cuadrito que indica los segundos
        g.setColor(Color.BLACK);
        while (cont <= 59) {//Este ciclo deibuja los numeros correspondientes a la hora, los minutos, y los segundos
            if (cont <= 23) {
                g.drawString(String.valueOf(cont), codigo[cont], 40);
            }
            if (cont <= 30) {
                g.drawString(String.valueOf(cont), codigo[cont], 110);
                g.drawString(String.valueOf(cont), codigo[cont], 180);
            } else {
                g.drawString(String.valueOf(cont), codigo[cont - 20] - codigo[11] + 10, 130);
                g.drawString(String.valueOf(cont), codigo[cont - 20] - codigo[11] + 10, 200);
            }
            cont = cont + 1;
        }
        g.drawString((String.valueOf(hora) + " : " + String.valueOf(min) + " : " + String.valueOf(sec)), 300, 300);//Como control decidi poner un reloj "Clasico" para ver si lo dibujado era correcto.


    }
/*
 * El Main, imprescindible en Java
 */
    public static void main(String[] args) {
        Main vent = new Main();
    }
/*
 * El "metodo" static se ejecuta apenas la clase es instanciada.
 * En este caso yo lo utilizo para incializar el vector que lleva las posiciones.
 */
    static {
        codigo[0] = 10;
        for (int i = 1; i <= 59; i++) {
            if (i > 10) {
                codigo[i] = codigo[i - 1] + 20;
            } else {
                codigo[i] = codigo[i - 1] + 15;
            }
        }
    }
/*
 * Toma la posición en X de la hora desde el vector
 */
    public int getPosHora() {
        int posicion = 0;
        posicion = codigo[hora];
        return posicion;
    }
/*
 * Toma la posicion en X de los minutos desde el vector
 */
    public int getPosXMin() {
        int posicionX = 0;
        if (min <= 30) {
            posicionX = codigo[min];
        } else {
            posicionX = codigo[min - 20] - codigo[11] + 10;
        }
        return posicionX;
    }
/*
 * Toma la posicion en X de los segundos desde el vector
 */
    public int getPosXSec() {
        int posicionX = 0;
        if (sec <= 30) {
            posicionX = codigo[sec];
        } else {
            posicionX = codigo[sec - 20] - codigo[11] + 10;
        }
        return posicionX;
    }
/*
 * Toma la posicion en Y de los Minutos
 */
    public int getPosYMin() {
        int posicionY = 0;
        if (min <= 30) {
            posicionY = 110 - 12;
        } else {
            posicionY = 130 - 12;
        }
        return posicionY;
    }
/*
 * Toma la posicion en Y de los segundos
 */
    public int getPosYSec() {
        int posicionY = 0;
        if (sec <= 30) {
            posicionY = 180 - 12;
        } else {
            posicionY = 200 - 10;
        }

        return posicionY;
    }
/*
 * Este metodo resume los anteriores, el parametro retorno sirve para indicar
 * que valor es el que quiere MINUTE o SECOND
 * El parametro eje sirve para indicar que eje (X o Y) es el que se desea.
 */
    public int getPosicion(int retorno, boolean eje) {
        int seleccion = 0;
        if (retorno == Calendar.MINUTE) {
            if (eje == ejeX) {
                seleccion = getPosXMin();
            } else {
                seleccion = getPosYMin();
            }
        }
        if (retorno == Calendar.SECOND) {
            if (eje == ejeX) {
                seleccion = getPosXSec();
            } else {
                seleccion = getPosYSec();
            }
        }
        return seleccion;
    }
/*
 *Al iniciarse el programa el primer metodo al que se llama es paint()
 *Luego se inicia el bucle principal, Primero actualiza el tiempo, luego redibuja la pantalla
 * Finalmente hace una espera.
 */
    public void run() {
        while (isVisible()) {
            updateTime();
            repaint();
            try{
                Thread.sleep(SPEED);
            }catch(InterruptedException e){
                
            }
        }
    }
}

 

Revise this Paste

Children: 28664
Your Name: Code Language: