2012-11-07 4 views
6

मुझे लगता है कि क्यों "windowClosed" विधि निम्नलिखित के रूप में अपने परीक्षण कोड में लागू नहीं किया जा रहा है एक मुद्दा है,खिड़की बंद क्यों नहीं किया जा रहा है, क्या कोई मुझे इस बारे में थोड़ा और बता सकता है?

import java.awt.event.WindowAdapter; 
import java.awt.event.WindowEvent; 

import javax.swing.JFrame; 

public class Tmp { 

    class TFrame extends JFrame{ 
     private static final long serialVersionUID = -5729542298504858399L; 

     public TFrame() { 
      setTitle("title"); 
      setSize(300, 300); 
     } 
    } 


    public static void main(String[] args) { 
     final TFrame t = new Tmp().new TFrame(); 
     t.addWindowStateListener(new WindowAdapter() { 
      @Override 
      public void windowStateChanged(WindowEvent e) { 
       super.windowStateChanged(e); 
       System.out.println(e.getOldState() + "<-old new->" + e.getNewState()); 
      } 
     }); 
     t.addWindowListener(new WindowAdapter() { 

      @Override 
      public void windowClosed(WindowEvent e) { 
       super.windowClosed(e); 
       System.out.println(e.getID() + "closed " + e.getNewState()); 
      } 

      @Override 
      public void windowClosing(WindowEvent e) { 
       super.windowClosing(e); 
       System.out.println(e.getID() + "closing" + e.getNewState()); 
      } 
     }); 
     t.setVisible(true); 
    } 
} 

अगर मैं बयान setDefaultCloseOperation लिखने (JFrame.DISPOSE_ON_CLOSE) या स्पष्ट रूप से कहते हैं निपटान() TFrame को, windowClosed() बुलाया जाएगा।

क्या कोई इसे अधिक विस्तार से समझा सकता है, मैं उलझन में हूं कि खिड़की के लिए श्रोताओं को लिखने का संपत्ति तरीका क्या है(), अग्रिम धन्यवाद।

////////////////// दान से //////////////

import java.awt.event.WindowAdapter; 
import java.awt.event.WindowEvent; 

import javax.swing.JFrame; 
import javax.swing.JOptionPane; 

public class Tmp { 

    class TFrame extends JFrame { 
     // ignored ..... 
     t.addWindowListener(new WindowAdapter() { 

      @Override 
      public void windowClosed(WindowEvent e) { 
       super.windowClosed(e); 
       System.out.println(e.getID() + "closed " + e.getNewState()); 
      } 

      @Override 
      public void windowClosing(WindowEvent e) { 
       super.windowClosing(e); 
       System.out.println(e.getID() + "closing" + e.getNewState()); 
       int quit = JOptionPane.showConfirmDialog(t, "Are you sure to quit?"); 
       if(quit == JOptionPane.YES_OPTION){ 
        t.dispose(); 
       } 
       else if (quit == JOptionPane.NO_OPTION){ 
        t.setVisible(false); 
       } 
      } 
     }); 
     t.setVisible(true); 
     t.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); 
    } 
} 

उत्तर

7

कुछ गाइड के अनुसार अद्यतन setDefaultCloseOperation के लिए डिफ़ॉल्ट मान HIDE_ON_CLOSE है। इसके साथ, खिड़की बंद नहीं है, यह केवल छिपा हुआ है।

किसी अन्य चीज़ को मूल्य बदलना, आप इसे छिपाने के बजाय वास्तव में बंद कर सकते हैं, इसलिए ईवेंट ट्रिगर हो जाएगा।

+1

आपके उत्तर के लिए धन्यवाद, मैंने jframe.java में setDefaultCloseOperation (..) की जांच की है, यह बताता है कि आपने क्या पोस्ट किया :-)। एक और चीज जो मैं लाना चाहता हूं वह है कि क्या मुझे हमेशा "DISPOSE_ON_CLOSE" पैरामीटर के रूप में उपयोग करना चाहिए यदि मैं विंडो बंद() को कॉल करना चाहता हूं? यह अच्छा होगा अगर कुछ अच्छे और संपत्ति गाइड/कोड स्निपेट दिए जाएंगे। – vicd

+0

यह संदर्भ पर निर्भर करता है। उदाहरण के लिए, यदि आप उपयोगकर्ता को बंद करने से पहले कुछ पूछना चाहते हैं, तो आपको इसे DO_NOTHING_ON_CLOSE के रूप में सेट करना होगा और विंडो पर बंद करना उपयोगकर्ता के लिए प्रश्न प्रदर्शित करेगा और फिर विंडो को निपटाना होगा। –

+0

मुझे यह मिला कि, मैंने आपके सुझाव के अनुसार एक त्वरित डेमो लिखा है, क्या यह कार्यान्वित करने का सही तरीका है? कृपया अद्यतन पोस्ट देखें :-) – vicd

संबंधित मुद्दे

 संबंधित मुद्दे