java - JFrame 关闭按钮的弹出窗口

标签 java swing jframe windowlistener jpopup

我正在做一些基本的 Java Swing 应用程序(初级)。 我要做的是当我按下 JFrame 上的关闭按钮 关闭窗口时我想要一个 JOptionPane 确认对话框 而不是直接关闭

这里是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 上的关闭按钮时,应该弹出这个弹出窗口而不是直接关闭
请指导我如何做..提前致谢

最佳答案

是的,您可以使用 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);



请看this tutorial了解更多详细信息。
但是对于您的场景,我建议您使用适配器类(因为您只需要一个事件,所以不需要厌倦并实现所有方法)所以这里是根据您的要求的示例< br/>

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

关于java - JFrame 关闭按钮的弹出窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15198549/

相关文章:

java - 字符串以位的形式存储在内存中

java - 无法实现拖放; dragSetData 没有被调用

java - 名字格式

java - 如何仅在需要时显示框架并设置框架始终显示在顶部?

java - java JFrame 中的 HTML?

java - 从 Java 树创建 html 嵌套列表

java - javax.swing.plaf.nimbus.ImageCache 中 ReentrantReadWriteLock 的用法

java - 从主机服务器运行 Swing 应用程序 (jar) 到远程机器

java - 如何让我的 JFrame 位于屏幕顶部?

java - JFrame多屏