当前位置: 首页 > 工具软件 > jDialog > 使用案例 >

Java中关闭jdialog_Java Swing - 如何当用户在JDialog外部单击时关闭模式JDialog

弘承业
2023-12-01

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);

}

}

 类似资料: