弹出JFrame关闭按钮

我正在做一些基本的Java Swing application (初学者级别)。 我要做的是当我按下close button on JFrame上的close button on JFrame来收集窗口我想要一个JOptionPane Confirm Dialog而不是直接关闭

这是代码JFrame

  JFrame frame= new JFrame("frame"); frame.setSize(300,300); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); frame.pack(); 

和JOptionPane代码是这样的

  final JOptionPane optionPane = new JOptionPane("Are You sure?",JOptionPane.QUESTION_MESSAGE, JOptionPane.YES_NO_OPTION); 

所以当按下JFrame上的关闭按钮时,弹出窗口会出现而不是直接关闭
请指导我如何做到这一点..提前谢谢

您可以按照以下步骤执行此操作:

  1. 替换行frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); with frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

  2. 实现WindowListener并覆盖其所有抽象方法。 你可以在这里找到它 。

  3. 以这种方式覆盖public void windowClosing(WindowEvent e)方法:

      @Override public void windowClosing(WindowEvent e){ int result = JOptionPane.showConfirmDialog(null, "Are you sure,"Confirm",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE); if(result == JOptionPane.YES_OPTION){ System.exit(0); }else{ //Do nothing } } 

是的,您可以使用WindowListener来完成此操作。

  public void windowClosed(WindowEvent e) { //This will only be seen on standard output. displayMessage("WindowListener method called: windowClosed."); } public void windowOpened(WindowEvent e) { displayMessage("WindowListener method called: windowOpened."); } public void windowIconified(WindowEvent e) { displayMessage("WindowListener method called: windowIconified."); } public void windowDeiconified(WindowEvent e) { displayMessage("WindowListener method called: windowDeiconified."); } public void windowActivated(WindowEvent e) { displayMessage("WindowListener method called: windowActivated."); } public void windowDeactivated(WindowEvent e) { displayMessage("WindowListener method called: windowDeactivated."); } public void windowGainedFocus(WindowEvent e) { displayMessage("WindowFocusListener method called: windowGainedFocus."); } public void windowLostFocus(WindowEvent e) { displayMessage("WindowFocusListener method called: windowLostFocus."); } public void windowStateChanged(WindowEvent e) { displayStateMessage( "WindowStateListener method called: windowStateChanged.", e); 

有关更多详细信息,请参阅本教程 。
但是对于你的场景,我建议你使用适配器类(因为你只需要一个事件,所以不需要累了并实现所有方法)所以这里有一个根据你的要求的例子

 import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JFrame; import javax.swing.JOptionPane; public class NoCloseFrame extends JFrame { public static void main( String[] arg ) { new NoCloseFrame(); } public NoCloseFrame() { super( "No Close Frame!" ); setDefaultCloseOperation( DO_NOTHING_ON_CLOSE ); setSize( 300, 300 ); setVisible( true ); addWindowListener( new AreYouSure() ); } private class AreYouSure extends WindowAdapter { public void windowClosing( WindowEvent e ) { int option = JOptionPane.showOptionDialog( NoCloseFrame.this, "Are you sure you want to quit?", "Exit Dialog", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE, null, null, null ); if( option == JOptionPane.YES_OPTION ) { System.exit( 0 ); } } } }