Popup for JFrame close button

ⅰ亾dé卋堺 提交于 2019-12-04 13:29:58

问题


i am doing some basic Java Swing application (beginner level) . what i have to do is when i press close button on JFrame to colse the window i want a JOptionPane Confirm Dialog instead of straightforward close

here is the code JFrame

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

and JOptionPane code goes like this

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

so when Close button on JFrame pressed this popup should come up instead of Direct closing
Please guide me how i can do it .. Thanks in advance


回答1:


You can do it by following steps:

  1. Replace the line frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); with frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

  2. Implement WindowListener and override its all abstract methods. You can find it here.

  3. Override the public void windowClosing(WindowEvent e) method some this way:

     @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
           }
     }
    



回答2:


Yes you can do this by using a 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);



Please see this tutorial for further details.
But for Your scenario , I recommend you to work with adapter class (as you need only one event so dont need to get tired and implement all methods)so here is an example for according to your requirment

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


来源:https://stackoverflow.com/questions/15198549/popup-for-jframe-close-button

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!