সুইং জিইউআইতে বৈধতা (), পুনরায়করণ () এবং অবৈধ () এর মধ্যে পার্থক্য


111

সুইং উপাদানগুলির পর্দার বিন্যাসের আপডেট সম্পর্কিত একাধিক পদ্ধতি রয়েছে, বিশেষত:

জাভা ডকুমেন্টেশনগুলি প্রযুক্তিগত দৃষ্টিকোণ থেকে এগুলি কিছুটা সংজ্ঞায়িত করে তবে এগুলি কীভাবে ব্যবহার করা হচ্ছে তা বিশেষভাবে স্পষ্ট নয়।

এগুলির মধ্যে পার্থক্য কী এবং কী পরিস্থিতিতে আপনার অন্যের চেয়ে একটি ব্যবহার করা উচিত?

উত্তর:


67

invalidate()ধারকটিকে অবৈধ হিসাবে চিহ্নিত করে। মানে সামগ্রীটি কোনওভাবে ভুল এবং অবশ্যই পুনরায় স্থাপন করা উচিত। তবে এটি কেবল এক ধরণের চিহ্ন / পতাকা। এটি সম্ভবত একাধিক অবৈধ পাত্রে পরে তাজা করা উচিত।

validate()রিলেআউট সম্পাদন করে। এর অর্থ হ'ল অবৈধ সামগ্রী সমস্ত আকারের জন্য জিজ্ঞাসা করা হয়েছে এবং সমস্ত উপ-উপাদানগুলির মাপগুলি লেআউটম্যানেজারের দ্বারা যথাযথ মানগুলিতে সেট করা আছে।

revalidate()উভয়ের যোগফল। এটি ধারকটিকে অবৈধ হিসাবে চিহ্নিত করে এবং ধারকটির বিন্যাস সম্পাদন করে।

হালনাগাদ:

কম্পোনেন্ট.জভা থেকে কিছু কোড

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
মেয়ো


এই ক্ষেত্রে আমি অনুমান করি (কখনও চেষ্টা করা হয়নি) RepaintManager বৈধতা বলবে
স্ট্যানিসালভএল

আমি একটি কুৎসিত বাগের সাথে কাজ করছিলাম এবং বৈধতার সাথে পুনর্নির্মাণের পরিবর্তে (যা ডলআউট বলে) এটি সমাধান করে ...
মেও

আমরা একটি স্থিত পদ্ধতি থেকে কীভাবে বৈধতা () বলতে পারি?
কুণাল তায়াগি

69

validate(): সুইং আপনি যখন একটি কম্পোনেন্ট তৈরি করবেন, এটি নয় validযেমন এর বৈধ সম্পত্তি false। কোনও উপাদানকে বৈধ বলে ধরা হয়, যখন এর প্রস্থ, উচ্চতা, অবস্থান এবং স্টাফ নির্ধারণ করা হয়েছে। এটি validate()সরাসরি বা অপ্রত্যক্ষভাবে তাদের পদ্ধতিতে কল করেই করা হয়। আমরা যখন ধারকগুলিতে কল করি তখন validate()এটি কন্টেইনারটিকে বৈধতা দেবে (যদি এটি অবৈধ থাকে) তবে তার doLayout()পদ্ধতিটি কল করে যা সাধারণত ডাকে LayoutManager। এখন এই ধারকটিতে রাখা প্রতিটি শিশু পুনরাবৃত্তির সাথে বৈধ হবে, যাতে পুরো গাছটি ছড়িয়ে দেওয়া হবে এবং বৈধ হয়ে উঠবে।

revalidate(): revalidate()আপনি যখন এমন কোনও বৈশিষ্ট্য পরিবর্তন করেন যা তাদের প্রস্থ / উচ্চতা এবং প্রভাবগুলি পুনরায় রঙ করবে তখন কল করা হবে যখন আপনি কোনও বৈশিষ্ট্য পরিবর্তন করেন যা তাদের উপস্থিতিকে প্রভাবিত করে। উদাহরণস্বরূপ, যদি JFrameআপনারটিতে একটি থাকে তবে JPanelএখন নির্দিষ্ট সময়ে আপনি এটি সরিয়ে JPanelফেলেছেন এবং নতুন জায়গায় স্থাপন করেছেন JPanel, নতুন স্থাপনার বিষয়বস্তুর উপর নির্ভর করে নিজের ভিতরে থাকা উপাদানগুলির আকারের JPanelপাশাপাশি The CONTAINER(গুণ অনুসারে) এর দ্বারা ব্যবহৃত লেআউট ম্যানেজারের) পরিবর্তন করে। যা এটিকে অবৈধ অবস্থায় ঠেলে দেয়। সুতরাং এই পরিবর্তনটি যাচাই করতে আপনাকে স্পষ্টভাবে কল করতে হবে revalidate()

invalidate(): এটি এমন কিছু যা আমি কখনও ব্যবহার করি নি, তাই এটি সম্পর্কে আমি সরবরাহ করতে পারে এমন বেশি তথ্য নাও থাকতে পারে। তবে দেখে মনে হচ্ছে যে উপস্থাপিত পরিস্থিতিগুলি ব্যবহার করার সময় কী ঘটেছিল সে সম্পর্কে কিছুটা ইঙ্গিত দিতে পারে invalidate()


1
আমি বিশ্বাস করি invalidate()যখন আপনি বেশ কয়েকটি উপাদান আপডেট করছেন এবং অবশেষে revalidate()বা এর সাথে লেআউটটি পুনরায় গণনা করার আগে এগুলিকে অবৈধ হিসাবে চিহ্নিত করতে চান তখন আমি কার্যকর validate()
কিউস - মনিকা

1
@ কিউস: আইএমএইচও, যেহেতু এটি স্বয়ংক্রিয়ভাবে বলা হচ্ছে তখন অবৈধ () কল করার দরকার নেই । অধিকন্তু, revalidate () নিজেই যে কাজের কি করতে হবে (যেমন জাভা ডক্স বিবৃত, এটা সুবিধাজনক পদ্ধতি হিসাবে উভয় কলিং জন্য কাজ করে invalidate ()এবং validate ())।
নি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.