Solución:
import java.awt.event.*;
import javax.swing.*;
public class YourDialog extends JDialog implements ActionListener {
JButton button;
public YourDialog() {
button = new JButton("Close");
button.addActionListener(this);
add(button);
pack();
setVisible(true);
}
public void actionPerformed(ActionEvent e) {
dispose();
}
}
-
cerrar solo dialolg usando
dispose()
el marco principal del método no está cerrado. razón por la que JVM no terminó.
Puedes tener el ActionListener
enviar un WindowEvent.WINDOW_CLOSING
, como se muestra aquí.
En el actionPerformed()
método de ActionListener
querrás algo como:
dialog.setVisible(false);
Si desea deshacerse del cuadro de diálogo de forma permanente (liberarlo de la memoria), entonces debería además llama:
dialog.dispose();
… donde diálogo es el nombre de su diálogo. Si dialog
es una variable local, necesitará hacerla final para acceder a ella de esta manera (o simplemente asegurarse de que sea “efectivamente final” desde Java 8 en adelante).
Si está agregando el botón como parte de una subclase de JDialog (es decir, si tiene class MyDialog extends JDialog
y estás agregando el oyente de acción en MyDialog
) querrás:
MyDialog.this.setVisible(false);