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); p >
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 p>
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 */
}