জাভা সুইং পুনর্নবীকরণ () বনাম পুনর্নির্মাণ ()


211

আমি একটি সুইং অ্যাপ্লিকেশন একসাথে রাখছি যেখানে আমি প্রায়শই একটি জেপানেলের সামগ্রীগুলি প্রতিস্থাপন করতে চাই। এটি করার জন্য, আমি কল করছি removeAll(), তারপরে আমার নতুন সামগ্রী যুক্ত করুন, তারপরে কল করছেন revalidate()

তবে আমি দেখতে পাচ্ছি যে পুরানো সামগ্রীটি এখনও বাস্তবে দৃশ্যমান (যদিও নতুন সামগ্রী দ্বারা অস্পষ্ট)। আমি একটি কল যুক্ত করে থাকেন repaint()ছাড়াও revalidate(), এটা প্রত্যাশিত হিসাবে কাজ করে।

আমি নিশ্চিত যে অন্যান্য অনুষ্ঠানে আমি অভিজ্ঞ যে শুধুমাত্র কল revalidate()করা যথেষ্ট।

সুতরাং মূলত আমার প্রশ্নটি হল - আমার উভয় ফাংশন কল করা উচিত এবং যদি না হয়, আমি কখন তাদের প্রতিটি কল করতে হবে?


6
ওরাকল-এর এই টিউটোরিয়ালটিতে বলা হয়েছে: "সর্বদা পুনর্নির্মাণের পরে পুনরায় রঙ করা উচিত"। যদিও এর কোনও ব্যাখ্যা সরবরাহ করা হয়নি।
মিনিট

উত্তর:


154

আপনাকে কল করতে হবে repaint()এবং revalidate()। প্রাক্তন সুইংকে বলে যে উইন্ডোর একটি অঞ্চল নোংরা (যা অপসারণ করা পুরানো বাচ্চাদের চিত্রটি মুছতে প্রয়োজনীয় removeAll()); পরেরটি লেআউট ম্যানেজারকে লেআউটটিকে পুনরায় গণনা করতে বলে (যা উপাদান যুক্ত করার সময় প্রয়োজনীয়)। এই কারণ উচিত সন্তানদের নূতনে রঙ করার প্যানেলের কিন্তু প্যানেলটি নিজেই তা করার (দেখুন কারণ নাও হতে পারে এই নূতনে রঙ ট্রিগারের তালিকা জন্য)।

আরও সাধারণ নোটে: মূল প্যানেলটি পুনরায় ব্যবহার করার পরিবর্তে, আমি একটি নতুন প্যানেল তৈরি করার এবং সেগুলি প্যারেন্টে অদলবদল করার পরামর্শ দেব।


1
আপনি কী যুক্তি দিয়ে বলতে পারেন যে কেন নতুন প্যানেল তৈরি করা পুরোনোটি ব্যবহারের চেয়ে ভাল সমাধান? :)
আর্ট্টু

3
@ আরট্টু - এটি কম কাজ, এবং এর ফলে ত্রুটিগুলি কম।
কেডিগ্রিগরি

86

আপনি যে কোনও সময় অপসারণ () বা একটি সরানোর সমস্ত () করুন, আপনার কল করা উচিত

  validate();
  repaint();

আপনি নতুন উপাদান যুক্ত () 'ing সম্পূর্ণ করার পরে।

আপনি যখন অপসারণ () অপসারণ করেন তখন বৈধতা () বা পুনর্নবীকরণ () কল করা বাধ্যতামূলক - প্রাসঙ্গিক জাভাদোকগুলি দেখুন।

আমার নিজের পরীক্ষাটি ইঙ্গিত করে যে পুনরায় রঙ করা () এছাড়াও প্রয়োজনীয়। আমি ঠিক জানি না কেন।


59

revalidateনতুন উপাদান যুক্ত হয়ে গেলে বা পুরানোগুলি সরিয়ে ফেলা হলে একটি ধারকটিতে ডাকা হয়। এই কলটি নতুন উপাদান তালিকার উপর ভিত্তি করে লেআউট ম্যানেজারকে পুনরায় সেট করতে বলা নির্দেশ is revalidateউপাদানটি 'নোংরা অঞ্চল' কী বলে তা পুনরায় রঙ করার জন্য একটি কল ট্রিগার করবে। স্পষ্টতই আপনার সমস্ত অঞ্চলকে JPaneltheRepaintManager

repaintনিজেকে পুনরায় রঙ করতে কোনও উপাদানকে বলতে ব্যবহৃত হয়। আপনার নিজের মতো ক্লিনআপ শর্তগুলির জন্য আপনাকে প্রায়শই এটি কল করতে হবে।


5

revalidate()কেবলমাত্র ধারকটিকে বিন্যাস করার অনুরোধ করুন, যখন আপনি কেবল revalidate()কাজের জন্য কল করেন repaint()তখন এটি পুনরায় বিন্যাসের সময় যখন তাদের সীমানা পরিবর্তন করা হয় তখন শিশু উপাদানগুলির সীমাটি ট্রিগার হয়ে যায় it কেস উল্লেখ করেছে কেবল উপাদান সরানো এবং কোন উপাদান সীমা পরিবর্তিত হয়, এই ক্ষেত্রে কোন repaint()হল "ঘটনাক্রমে" আলোড়ন সৃষ্টি।


-4

হ্যাঁ আপনাকে পুনরায় রঙ করতে হবে (); revalidate (); আপনি যখন সমস্ত অপসারণ কল করেন (তখন) আপনাকে পুনরায় রঙ করতে হবে () এবং পুনর্নির্মাণ ()

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.