簡體   English   中英

彈出JFrame關閉按鈕

[英]Popup for JFrame close button

我正在做一些基本的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上的關閉按鈕按下時,彈出窗口應該出現而不是直接關閉
請指導我如何做到這一點..提前謝謝

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

您可以按照以下步驟執行此操作:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM