Tengo una pregunta sobre joptionpane.¿Cómo cerrar el diálogo de mensaje mediante programación?
Utilizando JOptionPane.showMessageDialog (...), podemos crear un diálogo de mensaje. ¿Pero cómo cerrarlo programáticamente?
Tengo una pregunta sobre joptionpane.¿Cómo cerrar el diálogo de mensaje mediante programación?
Utilizando JOptionPane.showMessageDialog (...), podemos crear un diálogo de mensaje. ¿Pero cómo cerrarlo programáticamente?
Siempre puede obtener una referencia al JOptionPane obteniendo el WindowAncestor de cualquier componente que tenga, y luego llame al dispose()
o setVisible(false)
en la ventana devuelta. La ventana se puede obtener mediante el uso de SwingUtilities.getWindowAncestor(component)
Por ejemplo:
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class CloseOptionPane {
@SuppressWarnings("serial")
private static void createAndShowGui() {
final JLabel label = new JLabel();
int timerDelay = 1000;
new Timer(timerDelay , new ActionListener() {
int timeLeft = 5;
@Override
public void actionPerformed(ActionEvent e) {
if (timeLeft > 0) {
label.setText("Closing in " + timeLeft + " seconds");
timeLeft--;
} else {
((Timer)e.getSource()).stop();
Window win = SwingUtilities.getWindowAncestor(label);
win.setVisible(false);
}
}
}){{setInitialDelay(0);}}.start();
JOptionPane.showMessageDialog(null, label);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
Nada más que perfecto .... –
Puede alguien deducir marcas de éste, LOL, yo no lo creo 1 de este ejemplo muy bien hecho :-) –
Gracias. Sin embargo, la clave es llamar a todos los códigos necesarios antes de que se muestre JOptionPane. –