El ejemplo que realice para esta demostracion, es una aplicacion trivial, que muestra una pregunta en un JOptionPane y desaparece despues de un tiempo.
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;
import java.util.Timer;
import java.util.TimerTask;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
/**
* @web http://jc-mouse.blogspot.com/
* @author Mouse
*/
public class tictac {
//para la animacion
private Timer tiempo ;
private TimerTask task;
//para almacenar la respuesta
private String respuesta=null;
private int duracion = 3;//tiempo
private JFrame padre;
private boolean isrun=false;
public tictac(){
}
public void mostrar_pregunta(String p, int d){
this.duracion = d;
//comienza a contar el tiempo
Comenzar_a_contar();
//se muestra el JOptionPane
this.respuesta = JOptionPane.showInputDialog(this.padre, p , JOptionPane.QUESTION_MESSAGE);
//si contesto antes de que acabe el tiempo
if(isrun){
detener();
actualizar();
}
//System.out.println("Respuesta " + this.respuesta);
}
/* se ejecuta cuando acaba el tiempo */
public void time_is_over(){
try {
Robot robot = new Robot();
//se asigna una respuesta vacia
this.respuesta = "No tengo idea";
// se actualiza
actualizar();
//se presiona la tecla escape
robot.keyPress(KeyEvent.VK_ESCAPE);
} catch (AWTException ex) {
Logger.getLogger(tictac.class.getName()).log(Level.SEVERE, null, ex);
}
}
/* actualiza los objetos del frame padre */
public void actualizar(){
//se añade la respuesta al objeto label de miframe
miframe.lbRes.setText("Respuesta: " + this.respuesta);
miframe.lbtiempo.setText("0");
miframe.lbRes.repaint();
}
/* metodo que lleva el tiempo disponible para contestar*/
public void Comenzar_a_contar() {
isrun=true;
tiempo = new Timer();
task = new TimerTask() {
int contador=0;
public void run() {
contador++;
miframe.lbtiempo.setText(String.valueOf(contador));
System.out.println("tiempo transcurrido: " + contador);
if(contador == duracion){
System.out.println("Se acabo el tiempo, mala suerte");
time_is_over();
detener();
}
}
};
tiempo.schedule(task,0,1000);
}
/* detiene la animacion */
public void detener() {
isrun=false;
tiempo.cancel();
task.cancel();
}
}
Asi que como respuesta alternativa, puede utilizarse un JFrame que tenga la apariencia de un JOptionPane, si no es estrictamente necesario utilizar la clase JOptionPane, el funcionamiento es el mismo, con la diferencia de que ya no es necesario el uso de la clase Robot para cerrar el objeto, ya que un Jframe cuenta con el metodo dispose() para cerrar la ventana.
El video para mas detalles
y no puede faltar el codigo fuente, en Netbeans 6.0
6 comentarios:
Muchas gracias, me fue de gran ayuda el código, funciona a la perfección.
Excelente!
gracias por el aporte!
muy bueno!
de nada :)
Gracias me sirvio el robot :)
Gracias, gracias, estaba buscando esto, me ha servido mucho. Dios los bendiga,
MUCHAS GRACIAS!!!!
estuve dias pensando en dar una solucion a SALIR DE UN JOPTIONPANE y gracias a ti ya tengo un solucion.
SALUDOS y sigue adelante con este blog
Publicar un comentario