स्विंग GUI में वैलिडेट (), रिवाइडलेट () और अमान्य () के बीच अंतर


111

स्विंग घटकों में विशेष रूप से स्क्रीन लेआउट के अपडेट से संबंधित कई तरीके हैं:

जावा प्रलेखन इनको तकनीकी दृष्टिकोण से कुछ हद तक परिभाषित करता है, लेकिन यह विशेष रूप से स्पष्ट नहीं है कि इनका उपयोग कैसे किया जाए।

इनमें क्या अंतर है, और किन परिस्थितियों में आपको दूसरों के बजाय एक का उपयोग करना चाहिए?

जवाबों:


67

invalidate()कंटेनर को अमान्य के रूप में चिह्नित करता है। इसका मतलब है कि सामग्री किसी तरह गलत है और इसे फिर से निर्धारित किया जाना चाहिए। लेकिन यह सिर्फ एक तरह का निशान / झंडा है। यह संभव है कि बाद में कई अमान्य कंटेनरों को ताज़ा किया जाए।

validate()रिलेटआउट करता है। इसका मतलब है कि अमान्य सामग्री सभी आकारों के लिए पूछी जाती है और सभी सब-कमर्स के आकार लेआउटमैनेजर द्वारा उचित मूल्यों पर सेट किए जाते हैं।

revalidate()दोनों का योग है। यह कंटेनर को अमान्य के रूप में चिह्नित करता है और कंटेनर का लेआउट निष्पादित करता है।

अपडेट करें:

घटक से कुछ कोड। Java

public void revalidate() {
    revalidateSynchronously();
}

/**
 * Revalidates the component synchronously.
 */
final void revalidateSynchronously() {
    synchronized (getTreeLock()) {
        invalidate();

        Container root = getContainer();
        if (root == null) {
            // There's no parents. Just validate itself.
            validate();
        } else {
            while (!root.isValidateRoot()) {
                if (root.getContainer() == null) {
                    // If there's no validate roots, we'll validate the
                    // topmost container
                    break;
                }

                root = root.getContainer();
            }

            root.validate();
        }
    }
}

3
revalidate()कॉल नहीं करता है doLayout(), जो validate()करता है। तो यह वास्तव में दोनों का योग revalidateनहीं है - हमेशा के लिए एक वैध प्रतिस्थापन नहीं है validate
मेओ

यह AWT के लिए है, यह इस तरह से घूमता
Meo

इस मामले में मुझे लगता है (कभी नहीं की कोशिश की) RepaintManager वैध कॉल करेगा
StanislavL

मैं एक बदसूरत बग के साथ काम कर रहा था और वैध के साथ पुनर्वितरण की जगह ले रहा था (जिसे कॉल डॉयलआउट कहते हैं) ने इसे हल किया ...
मेओ

स्थैतिक विधि से हम वैध () को कैसे कह सकते हैं?
कुणाल त्यागी

69

validate(): स्विंग में जब आप एक घटक बनाते हैं, तो यह नहीं है validअर्थात इसकी वैध संपत्ति है false। एक घटक को वैध कहा जाता है, जब इसकी चौड़ाई, ऊंचाई, स्थान और सामान निर्धारित किया गया है। यह आमतौर पर validate()सीधे या परोक्ष रूप से उनकी पद्धति को बुलाकर किया जाता है । जब हम validate()कंटेनरों को कॉल करते हैं, तो यह कंटेनर (यदि यह अमान्य है) को इसकी doLayout()विधि को कॉल करके मान्य करेगा , जो आमतौर पर आह्वान करेगा LayoutManager। अब इस कंटेनर पर रखे गए प्रत्येक बच्चे को पुनरावर्ती रूप से मान्य किया जाएगा, ताकि पूरा पेड़ बाहर रखा जाएगा और वैध हो जाएगा।

revalidate(): revalidate()आपको उस विशेषता को बदलने के लिए कहा जाएगा जब आप उनकी चौड़ाई / ऊँचाई को प्रभावित करेंगे और जब आप अपनी उपस्थिति को प्रभावित करेंगे एक विशेषता को बदलते हैं। उदाहरण के लिए, यदि आपका JFrameकोई सम्‍मिलित है , तो JPanelअब एक निश्चित समय पर आपने उसे हटा दिया है JPanelऔर उसके स्थान पर एक नया डाला है, नव रखा की सामग्री के आधार पर JPanel, घटकों के आकार के JPanelसाथ-साथ The CONTAINERअपने आप में (गुण द्वारा) लेआउट प्रबंधक द्वारा उपयोग किया जाता है), बदलता है। जो इसे अमान्य स्थिति में धकेल देता है। तो इस परिवर्तन को मान्य करने के लिए, आपको स्पष्ट रूप से कॉल करना होगा revalidate()

invalidate(): यह एक ऐसी चीज है जिसका मैंने कभी उपयोग नहीं किया है, इसलिए हो सकता है कि मैं इसके बारे में अधिक जानकारी न दे पाऊं। लेकिन ऐसा लगता है कि ऊपर दिए गए परिदृश्य कुछ संकेत दे सकते हैं, जैसा कि उपयोग करते समय होता है invalidate()


1
मेरा मानना है कि invalidate()उपयोगी है जब आप कई घटकों को अपडेट कर रहे हैं और उन्हें पहले अमान्य अंत में साथ लेआउट recalculating के रूप में चिह्नित करना चाहते revalidate()या validate()
Qix - मोनासा

1
@Qix: IMHO, के बाद से अमान्य () को कॉल करने की आवश्यकता नहीं है , इसे स्वचालित रूप से कहा जा रहा है। इसके अलावा, पुनः सत्यापित () ही उस कार्य करना होगा (के रूप में जावा डॉक्स में कहा गया है, यह सुविधाजनक तरीके के रूप में दोनों फोन करने के लिए कार्य करता है invalidate ()और validate ())।
nicE cOw
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.