Red de conocimiento informático - Aprendizaje de programación - Programa de despertador JAVA

Programa de despertador JAVA

importar java.util.*;

importar java.awt.*

importar java.applet.*; java.text.*;

importar java.awt.event.*;

la alarma de clase pública extiende el subprograma implementa Runnable

{

Thread timer=null; //Crear temporizador de hilo

Imagen gif1; //clockp: shell del despertador, despertador y timbre de tiempo

boolean setflag=false, stopflag=false, cancelflag=false;

Panel setpanel;

//Obtener el archivo de sonido

AudioClip ring=getAudioClip(getCodeBase(), "1.mid");

Botón establecerbotón=nuevo Botón("ESTABLECER");

Botón cancelarbotón=nuevo Botón("CANCELAR"

Botón detenerbotón=nuevo Botón(" STOP ");

//Respuesta a eventos de botones

ActionListener privado setli=new ActionListener()

{

Acción nula pública realizada (ActionEvent e)

{

setflag=true

}

}

cancelación privada de ActionListener; =new ActionListener()

{

public void actionPerformed(ActionEvent e)

{

setflag=true

;

}

};

ActionListener privado stopli=new ActionListener()

{

Acción nula públicaPerformed(ActionEvent e)

p>

{

ring.stop();

//Borrar método

//g.clearRect(83, 280 , 20, 30);

}

};

Etiqueta nota1=nueva Etiqueta("Despertador:"

); //GregorianCalendar Lo que se proporciona es una herramienta estilo calendario con muchos más parámetros, lo que facilita mucho la operación. Las funciones de la clase Date son muy inferiores. Si quieres encontrar algo relacionado con la fecha, debes calcularlo tú mismo.

GregorianCalendar cal=new GregorianCalendar();

GregorianCalendar cal2=new GregorianCalendar();

SimpleDateFormat df=new SimpleDateFormat("aaaa MM dd HH: mm :ss"); //Establecer el formato de hora

Fecha dummy=new Date(); //Generar objeto de datos

Cadena lastdate=df.format(dummy);

Font F=new Font("TimesRoman",Font.PLAIN,14); //Establecer formato de fuente

Fecha dat=null

Fecha horaAhora

p>

Color fgcol=Color.azul;

Color fgcol2=Color.darkGray

Color backcolor=Color.azul

Label hlabel2, mlabel2, slabel2; //La etiqueta utilizada al mostrar la unidad de tiempo (hora, minuto, segundo)

int i

int s, m, h

p>

TextField sethour, setmin, setsec; // Muestra el cuadro de texto de la hora actual y el cuadro de texto programado

// En el programa Applet, primero llame automáticamente a la inicialización para completar el trabajo de inicialización necesario, luego llama automáticamente a inicio, en Se llama al ingresar al programa de ejecución y regresar a la página, y al pasar de esta página a otra, se llama a detener, y cuando se cierra el navegador, se ejecuta destruir.

public void init()//Método de inicialización

{

int fieldx=50, fieldy1=120, fieldy2=220, fieldw=30, fieldh= 20, space=50; //Muestra los parámetros de posicionamiento de los cuadros de texto de tiempo y temporización

setLayout(null); //Inicializa el administrador de diseño en nulo

setpanel=new Panel ( );

setpanel.setLayout(nulo);

setpanel.add(nota1);

nota1.setBounds(30, 100, 60, 20)

note1.setBackground(backcolor);

note1.setForeground(Color.black);

//Cuadro de texto para tiempo (hora, minuto, segundo); )

sethour=new TextField("00", 5);

setmin=new TextField("00", 5);

setsec=new TextField); ("00", 5);

hlabel2=nueva etiqueta();

mlabel2=nueva etiqueta()

slabel2=nueva etiqueta();

//La posición y el tamaño del cuadro de texto de la hora programada

setpanel.add(sethour)

sethour.setBounds(fieldx, fieldy2, fieldw, fieldh );

sethour.setBackground(Color.white);

//Agrega la unidad "hora" después del cuadro de texto

setpanel.add(hlabel2).

hlabel2.setText("h");

hlabel2.setBackground(color de fondo);

hlabel2.setForeground(Color.negro); p>

hlabel2.setBounds(fieldx fieldw 3, fieldy2, 14, 20);

fieldx=fieldx space

// La posición y el tamaño del texto del minuto cronometrado; box

setpanel.add(setmin);

setmin.setBounds(fieldx, fieldy2, fieldw, fieldh

setmin.setBackground(Color.white)

p>

//Agrega la unidad "minutos" después del cuadro de texto

setpanel.add(mlabel2); "m");

mlabel2.setBackground(backcolor);

mlabel2.setForeground(Color.negro);

mlabel2.setBounds(campox campow 3, fieldy2, 14, 20);

mlabel2.setBounds(fieldx campow 3, fieldy2, 14, 20);

p>

fieldx=fieldx);

space;

//La posición y el tamaño del cuadro de texto de segundos cronometrados

setpanel.add(setsec

setsec.setBounds(fieldx, fieldy2, fieldw , fieldh);

setsec.setBackground(Color.white);

//Agrega la unidad "segundos" después del cuadro de texto

setpanel.add. (slabel2 );

slabel2.setText("s");

slabel2.setBackground(color de fondo);

slabel2.setForeground(Color.negro);

slabel2.setBackground(backcolor);

slabel2.setForeground(Color.black);

p>

slabel2.setBounds(fieldx campow 3, fieldy2, 14, 20);

//Configurar botón de control del despertador (encendido, apagado)

setpanel.add(cancelbutton

setpanel.add); (setbutton);

setpanel.add(stopbutton);

cancelbutton.setBounds(90, 180, 40, 20);

setbutton.setBounds(140); , 180, 40, 20);

stopbutton.setBounds(522, 180, 40, 20);

setbutton.addActionListener (setli

cancelbutton); .addActionListener(cancelli);

stopbutton.addActionListener(stopli);

stopbutton.setVisible(false);

//Agregar el panel al contenedor actual. y establece el tamaño y el color de fondo del panel

add(setpanel

setpanel.setBounds(300, 1, 250, 420

setpanel); .setBackground(backcolor);

/*int xcenter, ycenter, s, m, h

//La ubicación del punto central del despertador

xcenter=145;

ycenter=162;

s=(int)cal.get(Calendario.SECOND); get(Calendar.MINUTE);

h=(int)cal.get(Calendar.HOUR_OF_DAY);

//Inicializar posición del puntero

lastxs=( int)(Math.cos(s*3.14f/30-3.14f/2)*30 xcentro);

lastys=(int)(Math.sin(s* 3.14f/30-3.14f); /2)*30 ycenter);

lastxm=(int)(Math.cos(m*3.14f/30-3.14f/2)*25 xcenter

lastym); =(int)(Matemáticas.sin

(m*3.14f/30-3.14f/2)*25 ycentro);

lastxh=(int)(Math.cos((h*30 m/2)*3.14f/180-3.14 f/2)*18 xcentro);

lastyh=(int)(Math.sin((h*30 m/2)*3.14f/180-3.14f/2)*18 ycentro);

lasts=s; */

MediaTracker mt=new MediaTracker(this);//Crea un objeto MediaTracker para rastrear medios para un componente determinado y agrega imágenes a la imagen rastreada. grupo

//Java permite que el Sapplet se descargue desde la ubicación donde se encuentra el HTML (base de documentos), y también permite que el Sapplet se descargue desde la ubicación donde se encuentra el Sapplet (base de código) .d?Y material. El objeto URL se puede obtener llamando a getDocumentBase()?cgotCodeBase().

?@¿Estas letras?La ubicación del caso original

//clockp=getImage(getDocumentBase(), "11.png");

gif1=getImage(getCodeBase(), "2.gif");

//i es el número de identificación

mt.addImage(gif1, i

try

<); p>{

mt.waitForAll();

}

catch(InterruptedException e)

{} //Esperar cargando para completar

resize(600, 420); //Establece el tamaño de la ventana

}

//Cuando la visualización de la ventana cambia Llama a paint

public void paint(Gráficos g)

{//Anular el método paint()

int xh, yh, xm, ym, xs, ys, strike_times; /p>

int xcenter, ycenter;

Cadena hoy

xcenter=148

ycenter=186; String today; p>

dat=new Date();

//Inicializa la hora del calendario con la hora actual

cal.setTime(dat>);

// Leer la hora actual

s=(int)cal.get(Calendar.SECOND

m=(int)cal.get(Calendar.MINUTE) ;

h=(int)cal.get(Calendar.HOUR_OF_DAY);

//Cambiar la forma de la expresión de tiempo

today=df.format(dat).

//Cambiar la forma de la expresión de tiempo

today=df.format(dat);

p>

//Posición del puntero

p>

xs=(int)(Math.cos(s*3.14f/30-3.14f/2)*30 xcenter

ys=(int)(Math.sin(s); *3.14f/30-3.14f/2)*30 ycentro);

xm=(int)(Math.cos(m*3.14f/30 -3.14f/2)*25 xcentro);

ym=(int)(Math.sin(m*3.14f/30-3.14f/2)*25 ycenter

xh=(int)(Math.cos); ((h*30 m/2)*3.14f/180-3.14f/2)*12 xcentro);

yh=(int)(Math .sin((h*30 m/2) *3.14f/180-3.14f/2)*12 ycenter);

//Establecer fuente y color

g.setFont (F); //Color de primer plano

g.setColor(getBackground()); //Obtener el color de fondo

g.drawImage(gif1, 75, 110, this

);

//Muestra el año, mes, día y hora numéricamente

g.drawString(today, 55, 415

//Dibuja puntero

g.drawLine(xc

enter, ycenter, xs, ys);

g.drawLine(xcenter, ycenter-1, xm, ym); //(x1, y1, x2, y2)

g); .drawLine(xcenter, ycenter, xm, ym);

g.drawLine(xcenter, ycenter-1, xh, yh);

g.drawLine(xcenter-1); , ycenter, xh, yh);

int timedelta; //Registra la diferencia horaria entre la hora actual y el temporizador de alarma

Entero currh, currm, currs; hora actual respectivamente, minutos, segundos

Fecha dat2=new Date();

cal2.setTime(dat2);

//Leer la hora actual

currh=(int)cal2.get(Calendario.SEGUNDO);

currm=(int)cal2.get(Calendario.MINUTO); (int) cal2.get(Calendar.HOUR_OF_DAY);

//Si haces esto, mi API quedará desactualizada

//timeNow=new Date(); >

/ /currh=new Integer(timeNow.getHours());

//currm=new Integer(timeNow.getMinutes());

//currs= new Integer(timeNow. getSeconds());

if(setflag)

{ //Juzga si el despertador está configurado

//Juzga si el la hora actual es la hora establecida por el despertador

if((currh.intValue()==Integer.valueOf(sethour.getText()).intValue())amp;amp;(currm.intValue ()==Integer.valueOf(setmin.getText ()).intValue())amp;amp;(currs.intValue()==Integer.valueOf(setsec.getText()).intValue()))

{

ring.play();

g.drawImage(gif1, 83, 280, esto

stopbutton.setVisible(true);

}

timedelta=currm.intValue()*60 currs.intValue()-Integer.valueOf(setmin.getText()).intValue()*60-Integer); .valueOf(setsec.getText()).intValue ();

if((timedeltagt;=30))

{

//Si la diferencia entre la hora actual y el despertador supera los 30 segundos, el despertador se detendrá automáticamente

ring.stop()

//Método borrar

g; .clearRect(83, 280, 20, 30);

/p>

}

}

dat=null

}

inicio vacío público()

{

if(timer==null)

{

timer=new Thread(this); //Crear instancia del temporizador

timer.start();

}

}

parada de vacío público()

{

timer=null;

}

//Una función que se ejecuta automáticamente después de iniciar después de crear el hilo

public void run()

{

//En el método run(), llame al método repaint() para volver a dibujar el área del subprograma y actualizar la visualización del reloj. Luego llame al método de suspensión para dejar que el hilo actual (es decir, el hilo de reloj que creamos) duerma durante 1000 milisegundos. Debido a que necesitamos actualizar la pantalla cada segundo, déjelo dormir durante 1 segundo

mientras (. temporizador!=null)

{

intenta

{

timer.sleep(1000

); }

catch(InterruptedException e)

{}

// Al llamar a repaint, primero se borrará el contenido de la pintura antes del método paint y entonces se llamará al método paint

repaint(); //Actualiza la pantalla

}

timer=null

}

//Cuando AWT recibe Cuando un subprograma recibe una solicitud de repintado, llama a update() del subprograma. De forma predeterminada, update() borra el fondo del subprograma y luego llama a paint(). Sobrecargue update() e incluya el código de dibujo previamente en paint() en update() para evitar borrar toda el área cada vez que vuelva a dibujar

//Hay dos formas de hacer esto, obviamente, Reducir el parpadeo: Sobrecargar actualización () o utilizar doble buffer.

//Utilice tecnología de doble búfer: otra forma de reducir el parpadeo entre fotogramas es utilizar doble búfer, que se utiliza en muchos subprogramas de animación. El principio principal es crear una imagen de fondo, dibujar el marco que se debe dibujar en la imagen y luego llamar a DrawImage () para dibujar la imagen completa en la pantalla a la vez. La ventaja es que la mayor parte del dibujo está desactivado; -pantalla y la imagen fuera de la pantalla se dibuja al mismo tiempo. Dibujar en la pantalla es mucho más efectivo que dibujar directamente en la pantalla, lo que mejora en gran medida el rendimiento del dibujo.

// El almacenamiento en búfer doble puede hacer que la animación sea fluida, pero tiene la desventaja de que es necesario asignar una imagen de fondo. Si la imagen es bastante grande, esto requerirá una gran cantidad de memoria cuando la use. tecnología de doble buffer, deberías sobrecargar la actualización().

actualización de vacío público (Gráficos g)

{

Imagen offscreen_buf=null;

//actualización (usando tecnología de doble almacenamiento en búfer) método

if(offscreen_buf==null)

offscreen_buf=createImage(600, 420);

Gráficos offg=offscreen_buf.getGraphics(); >

p>

offg.clipRect(1, 1, 599, 419

pintura(offg);

Gráficos ong=getGraphics(); p>

ong.clipRect(1, 1, 599, 419);

ong.drawImage(offscreen_buf, 0, 0, esto

}

;

/ ** Crea una nueva instancia de AlarmClock */

}