2012-03-16 12 views
7

में setEnabled (false) को कॉल करने का कारण मैं थोड़ी देर के लिए स्विंग पर काम कर रहा हूं लेकिन जब मुझे JPanel पर कॉल करना पड़ा तो अभ्यास में कोई स्थिति नहीं थी। फिर भी, मैं कभी-कभी कुछ परिष्कृत गुई में ऐसे कोड को देखता हूं। लेकिन मैं वास्तव में यह नहीं समझता कि कोई इसका उपयोग क्यों करना चाहता है? तो, कृपया JPanel पर setEnabled(false) का उपयोग करने की आवश्यकता होने पर मुझे वास्तविक जीवन सामान्य परिस्थितियों के कुछ उदाहरण दें।जेपीनेल

इसके अलावा जावाडोक में यह कहते हैं:

अक्षम करना एक घटक अपने बच्चों को निष्क्रिय नहीं है।

असल में मेरे पास एक बग था क्योंकि कॉलम का आकार बदलते समय JPanel अक्षम तालिका को माउस का आकार बदलना नहीं था। मुझे संदेह है कि यहां अन्य अप्रिय आश्चर्य हैं।

+0

मुझे विश्वास है कि आप एक शीर्ष स्तर खिड़की इस तरह से निष्क्रिय कर सकते हैं, लेकिन एक कंटेनर नहीं –

+0

@Hovercraft मछली के पूर्ण: अभी भी JPanel ऐसी पद्धति है। मेरे लिए यह संभावित बग्स का पूरी तरह से बेकार स्रोत जैसा दिखता है। लेकिन शायद मैं गलत कर रहा हूं और इसमें जेपीनल के लिए कुछ व्यावहारिक उपयोग है। – GrayR

+0

स्विंग के साथ काम करना हजारों कटौती से मौत की तरह है। एक तरीका जो कुछ भी नहीं करता है? वास्तव में? – gdbj

उत्तर

6

एक कारण यह है कि getEnabled() सही स्थिति को प्रतिबिंबित करेगा। एक ऐसे मामले पर विचार करें जहां कुछ इवेंट हैंडलर पैनल को फ्लैग करना चाहता है, अब सक्षम नहीं है और यह घटना के समय के दौरान समझदार नहीं है और सभी बाल घटकों को अक्षम कर दिया गया है। ऐप के अन्य हिस्सों को getEnabled() से के माध्यम से पैनल की स्थिति का परीक्षण करने की आवश्यकता हो सकती है, यह निर्धारित करें कि ऐप में विभिन्न बिंदुओं पर क्या करना है।

मुझे व्यक्तिगत रूप से ऐसा कभी नहीं करना पड़ा था, लेकिन अब आपने मुझसे पूछा और मुझे सोच रहा था कि मैं इसे कभी-कभी उपयोग कर सकता हूं। धन्यवाद। & & + 1 प्रश्न के लिए।

+0

मुझे लगता है कि जब आप सभी बच्चों को अक्षम करते हैं तो यह एक वैध उपयोग है। अन्यथा यह मेरे प्रश्न में वर्णित एक जैसा बग का कारण बन सकता है। रास्ते से महान उदाहरण। यह एक दयालुता है स्विंग के पास कोड की एक पंक्ति में किसी घटक के सभी बच्चों को अक्षम करने का कोई तरीका नहीं है। – GrayR

+1

एक utils कक्षा में एक setEnabledAll() पर्याप्त आसान होगा। मैं किसी को जोड़ दूंगा कि किसी को यह देखने की ज़रूरत है कि यह कैसे किया जाएगा। – Java42

+0

एक साधारण राज्य झंडा के पास वांछित व्यवहार के बिना अधिक मूल्य नहीं है। आपका 'setEnabledAll() 'जेपीनेल के लिए एक स्पष्ट विस्तार (या आमतौर पर किसी भी दृश्य तत्व के लिए, घटक की तरह) लगता है। मैं स्विंग में इस तरह के सिर स्क्रैचर्स ढूंढ रहा हूं। – gdbj

5

स्टार्टर कोड एक कंटेनर में सभी घटकों को सक्षम/अक्षम करने के लिए।

JPanel p = new JPanel(); 
p.setEnabled(state); 
setEnabledAll(p, state); 

public void setEnabledAll(Object object, boolean state) { 
    if (object instanceof Container) { 
     Container c = (Container)object; 
     Component[] components = c.getComponents(); 
     for (Component component : components) { 
      setEnabledAll(component, state); 
      component.setEnabled(state); 
     } 
    } 
    else { 
     if (object instanceof Component) { 
      Component component = (Component)object; 
      component.setEnabled(state); 
     } 
    } 
} 
संबंधित मुद्दे