Java tutorial
import java.awt.BorderLayout; import java.awt.Frame; import java.awt.event.WindowEvent; import java.awt.event.WindowFocusListener; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.SwingUtilities; import javax.swing.WindowConstants; public class Main extends JDialog { public Main(final Frame owner) { super(owner); JPanel pnl = new JPanel(new BorderLayout()); pnl.add(new JLabel("Click outside this dialog in the parent frame to close it"), BorderLayout.NORTH); JButton btn = new JButton("Click Me"); btn.addActionListener(e -> JOptionPane.showMessageDialog(Main.this, "New Child Window")); pnl.add(btn, BorderLayout.CENTER); this.setContentPane(pnl); this.pack(); this.setLocationRelativeTo(owner); this.setAlwaysOnTop(true); this.addWindowFocusListener(new WindowFocusListener() { public void windowGainedFocus(WindowEvent e) { } public void windowLostFocus(WindowEvent e) { if (SwingUtilities.isDescendingFrom(e.getOppositeWindow(), Main.this)) { return; } Main.this.setVisible(false); } }); } public static void main(String[] args) { JFrame parent = new JFrame(); parent.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); parent.setSize(300, 300); parent.setVisible(true); Main dlg = new Main(parent); dlg.setVisible(true); } }