Abrir desde un jframe un jdialog modal que se cierre después de un tiempo
En uno de mis proyectos que estaba desarrollando en java necesitaba enviar un mensaje a la pantalla, pero que después de un cierto tiempo el mensaje se cerrara sólo, al principio no sabía cómo hacerlo, de tal modo que busqué un poco de información en la web y encontré una manera de hacerlo usando la clase timer.
El problema se solucionó de la siguiente manera., fue elaborado en netbeans 8.0, en fedora gnome
/*el jframe principal contiene el siguiente código*/
public class menuInicial extends javax.swing.JFrame {
/**
* Creates new form menuInicial
*/
public menuInicial() {
initComponents();
}
private void jbAbrirDialogeActionPerformed(java.awt.event.ActionEvent evt) {
new mensajeFelicitacion(this, rootPaneCheckingEnabled).setVisible(true);
}
private void jbSalirActionPerformed(java.awt.event.ActionEvent evt) {
System.exit(0);
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new menuInicial().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JLabel jLabel1;
private javax.swing.JPanel jPanel1;
private javax.swing.JButton jbAbrirDialoge;
private javax.swing.JButton jbSalir;
// End of variables declaration
}
El jframe principal contiene lo que se muestra en la imagen de arriba.
Las líneas que se agregan al código, son las que abren el diálogo y la del cerrar el programa
en el botón Abrir diálogo se agrega
new mensajeFelicitacion(this, rootPaneCheckingEnabled).setVisible(true);
y en el botón salir se agrega:
System.exit(0);
En la interfaz dialog contiene
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Timer;
/**
*
* @author neo
*/
public class mensajeFelicitacion extends javax.swing.JDialog implements ActionListener{
/**
* Creates new form mensajeFelicitacion
*/
public mensajeFelicitacion(java.awt.Frame parent, boolean modal) {
super(parent, modal);
Timer t = new Timer(10000, this); // Timer in 10 seconds
t.start();
initComponents();
}
@Override
public void actionPerformed(ActionEvent e) {
this.dispose();
}
// Variables declaration - do not modify
private javax.swing.JLabel jLabel1;
private javax.swing.JPanel jPanel1;
// End of variables declaration
}
Lo importante aquí es que el jdialog implemente ActionListener, para que valide cuando el tiempo del timer ya haya transcurrido, es necesario sobre escribir el método.
En el constructor se inicializa el timer y se inicia.
public mensajeFelicitacion(java.awt.Frame parent, boolean modal) {
super(parent, modal);
Timer t = new Timer(10000, this); // Timer in 10 seconds
t.start();
initComponents();
}
@Override
en el escuchador se valida que el tiempo llegue a lo acordado, para que se destruya cuando sea necesario.
public void actionPerformed(ActionEvent e) {
this.dispose();
}
Y eso es todo.
Eduardo Ramirez
hace 6 añosEduardo Ramirez
hace 6 añosFernando Merino
hace 8 añosTe entendería mucho mejor, si me mandaras un esketch del proceso que deseas hacer, un esquema, pues, y con gusto lo paso a código, para ver si es lo que necesitas...
Fabian Montoya
hace 8 añosSé como abrir el otro JFrame desde el JDialog, pero no puedo cerrar el JFrame que abrio el JDialog, solo puedo cerrar el Jdialog y abrir el nuevo JFrame.
Ayuda!! :(