ventana modal eventos evento ejemplo con como cerrar boton java swing modal-dialog jdialog

modal - jdialog java ejemplo



cómo cerrar jdialog desde un botón? (2)

alguien me dijo..

import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JFrame; public class Mainz extends JFrame implements ActionListener{ JButton showDialog = new JButton("show dialog"); public Mainz() { setLayout(new FlowLayout()); showDialog.addActionListener(this); add(showDialog); setVisible(true); } @Override public void actionPerformed(ActionEvent e) { new Dialogz(this, false); setEnabled(false); } public static void main(String[]args){ new Mainz(); } } class Dialogz extends JDialog{ JButton close = new JButton("close"); public Dialogz(JFrame owner,boolean modal) { super(owner, modal); add(close); setLocationRelativeTo(owner); setVisible(true); close.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae){ closez(); } }); } void closez(){ System.out.println("before ="+getModalityType()); setModal(true); System.out.println("after ="+getModalityType()); getOwner().setEnabled(true); Dialogz.this.dispose(); } }

tengo un Jframe (Mainz),

tiene un botón (showDialog),

cuando el usuario hace clic en el botón,

jdialog (Dialogz) mostrará,

ese jdialog tiene un botón

  • cómo cerrar jdialog desde ese botón (dentro de jdialog)?
  • ¿Puedo cambiar el modo de diálogo después de crear una instancia de este?

Necesito bloquear al dueño de ese jdialog

aquí lo intento ...

import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JFrame; public class Mainz extends JFrame implements ActionListener{ JButton showDialog = new JButton("show dialog"); public Mainz() { setLayout(new FlowLayout()); showDialog.addActionListener(this); add(showDialog); setVisible(true); } @Override public void actionPerformed(ActionEvent e) { new Dialogz(this, true); } public static void main(String[]args){ new Mainz(); } } class Dialogz extends JDialog{ JButton close = new JButton("close"); public Dialogz(JFrame owner,boolean modal) { super(owner, modal); System.out.println(this.getModalityType()); add(close); setLocationRelativeTo(owner); setVisible(true); close.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae){ closez(); } }); } void closez(){ setModal(false); this.dispose(); System.out.println("Method Done"); } }

muchas gracias por cualquier tipo de ayuda


¿Puedo cambiar el modo de diálogo después de crear una instancia de este?

sí puede cambiar setModal o ModalityTypes en tiempo de ejecución, pero para el código en esta forma no me hace ningún comentario

cómo cerrar jdialog desde ese botón (dentro de jdialog)?

en este caso, no importa si va a llamar a setVisible o a dispose()

  • crea JDialog solo una vez,

  • crear eso como variable local

  • cambiar myDialog.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE); , luego, el button en la toolbar (con X ) para ocultar JDialog también

  • luego puede llamar desde actionPerformed only myDialog.setVisible(true) y ModalityType también si es necesario, setVisible shoud debe estar envuelto en invokeLater() , en lugar de crear una nueva instancia ( new Dialogz(this, true); )

  • JButton colocado en JDialog se llamará solo myDialog.setVisible(false)

  • ejemplo correspondiente con sus lógicas