with ventana modal eventos ejemplo dialogo close cerrar boton automaticamente java swing jdialog

ventana - eventos jdialog java



Botón para cerrar un JDialog (5)

Quiero agregar un botón (JButton) en la parte inferior de un JDialog que debería cerrar el JDialog cuando se presiona. El problema es que no sé qué escribir en el ActionListener de ese botón. No quiero que el botón salga del programa, simplemente cierre el cuadro de diálogo.

El JDialog se crea al llamar explícitamente a uno de los constructores de JDialog, no al llamar a uno de los métodos desde JOptionPane.

Me sorprendió mucho que no pudiera encontrar una respuesta a esto utilizando Google. Esperaba que un problema que tan a menudo se encuentra fuera cubierto en muchos sitios de programación. Bastante raro que no lo sea.


Además de otras respuestas, puede configurarlo como el botón predeterminado para el panel de raíz de diálogo:

JButton myButton = new JButton("Close"); myButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { dispose(); // Or whatever else setVisible(false); } }); getRootPane().setDefaultButton(myButton);

De esa manera, se llamará a su ActionListener cada vez que se presione Intro .


En el método actionPerformed() de ActionListener querrás algo como:

dialog.setVisible(false);

Si desea deshacerse del cuadro de diálogo de forma permanente (libérelo de la memoria), también debería llamar:

dialog.dispose();

... donde diálogo es el nombre de tu diálogo. Si el dialog es una variable local, deberá hacer que sea definitivo para acceder a él de esta manera (o simplemente asegúrese 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 la class MyDialog extends JDialog y está agregando la escucha de acción en MyDialog ) que querrá:

MyDialog.this.setVisible(false);


He hecho esto de manera ligeramente diferente y sirve al propósito. Tengo varias clases. Extienden JPanel, tienen diferentes propósitos y usan JDialogs para obtener las entradas de los usuarios.

Una clase típica contendría los campos necesarios, guardar y cancelar botones.

la clase pública EnterpriseGUI extiende javax.swing.JPanel {...} se vería así:

La clase EnterpriseGUI tiene una variable privada jdialog y un método para configurar jdialog. También ActionEvent para el botón ''guardar'' y el botón ''cancelar''.

private JDialog jdialog; public void setJDialog(JDialog jdialog) { this.jdialog = jdialog; } private void btnSaveActionPerformed(java.awt.event.ActionEvent evt) { //Do your stuff.. jdialog.dispose(); } private void btnCancelActionPerformed(java.awt.event.ActionEvent evt) { //Discard your stuff.. jdialog.dispose(); }

Finalmente, creo una instancia de EnterpriseGUI de cualquier otra clase según sea necesario y la incorporo en JDialog.

Class OtherClass{ private JDialog dialog; private EnterpriseGUI = new enterprisegui(); private void button1ActionPerformed(java.awt.event.ActionEvent evt) { this.dialog = new JDialog(this, "My dialog", true); this.dialog.setResizable(false); enterprisegui.setJDialog(dialog); this.dialog.getContentPane().add(enterprisegui); this.dialog.pack(); Dimension Size = Toolkit.getDefaultToolkit().getScreenSize(); this.dialog.setLocation(new Double((Size.getWidth()/2) - (dialog.getWidth()/2)).intValue(), new Double((Size.getHeight()/2) - (dialog.getHeight()/2)).intValue()); this.dialog.setVisible(true); } }


Puede hacer que ActionListener WindowEvent.WINDOW_CLOSING un WindowEvent.WINDOW_CLOSING , como se muestra here .


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 utilizando el método padre dispose() no cerrado. razón por la que JVM no ha terminado.