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