2013-03-04 2 views
4

나는 약간의 기본을하고있다 Java Swing application (초급). 내가 창을 colse하는 close button on JFrame을 누를 때 나는 무엇을해야 내가 대신 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-closing) – MadProgrammer

답변

3

당신은 다음 단계로 그것을 할 수 있습니다 :

  1. WindowListener를 구현하고 모든 AB의를 오버라이드 (override) frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

  2. 와 라인 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 교체 stract 방법. 당신은 find it here 일 수 있습니다.

  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 
         } 
    } 
    
+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를 참조하십시오.
는하지만 시나리오, 그래서 여기에 귀하의 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); 
      } 
     } 
    } 
} 
+0

정말 감사했습니다. – Sikander

+0

환영합니다. http://docs.oracle.com/javase/7/docs/api/java/lang/Runtime.html#addShutdownHook%28java.lang.Thread%29 및 해당 메소드도 참조하십시오. 'addShutdownHook' – Freak

+0

물론 내가하겠다 ...... – Sikander