2013-03-04 2 views
4

Я делаю некоторые основные Java Swing application (начальный уровень). то, что я должен делать, когда я нажимаю close button on JFrame в colse окно я хочу JOptionPane Confirm Dialog вместо просто близкоВсплывающее окно для кнопки закрытия JFrame

здесь код 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 нажата, это всплывающее окно должно появиться вместо прямого закрытия.
Прошу, пожалуйста, как я могу это сделать .. Спасибо заранее

+2

Посмотрите на [это] (http://stackoverflow.com/questions/3777146/how-can-a-swing- windowlistener-veto-jframe-clos) – MadProgrammer

ответ

3

Вы можете сделать это с помощью следующих шагов:

  1. Заменить строку frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); с frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

  2. Реализовать WindowListener и перегрузить его все аб методы релаксации. Вы можете find it here.

  3. Override метод 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 
         } 
    } 
    
+0

поблагодарить вас за полезное +1 для вашего руководства. – Sikander

+0

@Sikander приветствуется – gprathour

+0

лучше объяснено так изменено на принятый ответ – Sikander

6

Да, вы можете сделать это, используя 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 для получения дополнительной информации.
Но для вашего сценария, я рекомендую вам работать с классом адаптера (как вам нужно только одно событие, так что не нужно устают и реализовать все методы), так вот пример для в соответствии с вашим требование

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

Спасибо, что это очень помогло. – Sikander

+0

Добро пожаловать. Я также предлагаю вам также увидеть это также http://docs.oracle.com/javase/7/docs/api/java/lang/Runtime.html#addShutdownHook%28java.lang.Thread%29 и его метод 'addShutdownHook' – Freak

+0

Конечно, я буду ...... – Sikander

Смежные вопросы