জাভা: উপাদানগুলিতে সেটপ্রফ্রেডসাইজ () এবং সেটসাইজ () পদ্ধতির মধ্যে পার্থক্য


105

setSize()এবং এর মধ্যে প্রধান পার্থক্য কী setPreferredSize()। কখনও কখনও আমি ব্যবহার করি setSize(), কখনও setPreferredSize()কখনও কখনও কখনও আমি যা চাই তা করি, কখনও কখনও অন্যটি।

JFrameএস এবং JPanelএস এর জন্য আমার কোন কলটি ব্যবহার করা উচিত ?

উত্তর:


116

উপাদানটির পিতামাতার একটি বিন্যাস পরিচালক আছে কি না তার উপর নির্ভর করে।

  • setSize() - যখন প্যারেন্ট লেআউট ম্যানেজার উপস্থিত না থাকে তখন ব্যবহার করুন;
  • setPreferredSize()(এছাড়াও এটি সম্পর্কিত setMinimumSizeএবং setMaximumSize) - যখন কোনও প্যারেন্ট লেআউট ম্যানেজার উপস্থিত থাকে তখন ব্যবহার করুন।

setSize()যদি কম্পোনেন্ট এর অভিভাবক একটি লেআউট ম্যানেজার ব্যবহার করছে পদ্ধতি সম্ভবত কিছু করতে না; সাধারণত যে জায়গাগুলির এটির প্রভাব থাকবে সেগুলি শীর্ষ স্তরের উপাদান ( JFrameগুলি এবং JWindowগুলি) এবং যে জিনিসগুলি স্ক্রোলড প্যানগুলির অভ্যন্তরে রয়েছে সেগুলিতে হবে। setSize()কোনও লেআউট ম্যানেজার ছাড়াই পিতামাতার ভিতরে উপাদানগুলি পেয়ে থাকলে আপনাকে অবশ্যই কল করতে হবে ।

setPreferredSize()কোনও লেআউট ম্যানেজার উপস্থিত থাকলে সাধারণত প্রত্যাশা অনুযায়ী উপাদানগুলি সাজিয়ে রাখবেন; বেশিরভাগ লেআউট ম্যানেজাররা তাদের উপাদানগুলির পছন্দসই (পাশাপাশি সর্বনিম্ন এবং সর্বাধিক) মাপগুলি পেয়ে কাজ করেন, তারপরে লেআউটটির বিধি অনুযায়ী সেই উপাদানগুলি ব্যবহার করে setSize()এবং setLocation()অবস্থান নির্ধারণ করে।

উদাহরণস্বরূপ, একটি BorderLayout"উত্তর" অঞ্চলের সীমানাটিকে তার উত্তর উপাদানটির পছন্দসই আকারের সমান করার চেষ্টা করে --- এগুলি JFrameঅন্য উপাদানগুলির আকারের উপর নির্ভর করে তার চেয়ে বড় বা ছোট হতে পারে লেআউটে এবং অন্যান্য।


1
আমি ভেবেছিলাম কোনও উপাদান কোনও ডিফল্টরূপে (লেটার লেআউট?) লেআউট ম্যানেজারটি ব্যবহার করছে, সুতরাং যদি আমি স্পষ্টভাবে একটি বিন্যাস ব্যবস্থাপক সেট না করি তবে তার অর্থ কি সেটপ্রেসারডসাইজ () এর পরিবর্তে আমার সেটসাইজ () ব্যবহার করা উচিত?
ডেভিড রোবলস

3
আমি বিশ্বাস করি জেপ্যানেলস ডিফল্টরূপে বর্ডারলআউট ব্যবহার করে, তবে জেকম্পোনেন্টের কোনও ডিফল্ট বিন্যাস নেই। বেশিরভাগ সময়, আপনি যদি সেটসাইজ () ব্যবহার না করে কিছু যুক্ত করে থাকেন তবে একটি বিন্যাস পরিচালককে সেট করা থেকে ভাল।
এসবিডড

8
আমার সুপারিশটি সর্বদা একটি বিন্যাস ব্যবস্থাপক ব্যবহার করা। সেটসাইজ () কে এমন কিছু হিসাবে ভাবা উচিত যা লেআউট ম্যানেজার বলে - এমন কিছু নয় যা আপনি কল করেন।
কেভিন ডে

8
@ এসবডড - জেপ্যানেলগুলির ডিফল্টরূপে একটি ফ্লোএলআউট রয়েছে। JFrame.getContentPane () এর ডিফল্টরূপে একটি বর্ডারলআউট রয়েছে।
নেমি

10

setSize()বা setBounds()কোনও লেআউট ম্যানেজার ব্যবহার না করা অবস্থায় ব্যবহার করা যেতে পারে।

যাইহোক, যদি আপনি একটি লেআউট ম্যানেজার ব্যবহার করছেন আপনি ব্যবহার বিন্যাস ম্যানেজারের সাথে নির্দেশ প্রদান করতে পারেন setXXXSize()মত পদ্ধতি setPreferredSize()এবং setMinimumSize()ইত্যাদি

এবং নিশ্চিত হয়ে নিন যে উপাদানটির ধারক একটি বিন্যাস পরিচালক ব্যবহার করেছে যা অনুরোধ করা আকারকে সম্মান করে। FlowLayout, GridBagLayout, এবং SpringLayoutপরিচালকদের উপাদান পছন্দের আকার (শেষের দুইজন সীমাবদ্ধতার আপনাকে সেট উপর নির্ভর করে), কিন্তু ব্যবহার BorderLayoutএবং GridLayoutসাধারণত আপনি don't.If একটি উপাদান ইতিমধ্যে দৃশ্যমান যে জন্য নতুন আকারের হিন্ট উল্লেখ, আপনি revalidate পদ্ধতি ডাকা প্রয়োজন এটির পুনরুক্তিটি আবার তৈরি করা হয়েছে তা নিশ্চিত করা। তারপরে পুনরায় রঙ করার পদ্ধতিটি শুরু করুন।


5

setSize উপাদানটিকে নির্দিষ্ট আকারে পুনরায় আকার দেবে।

setPreferredSizeপছন্দসই আকার নির্ধারণ করে। উপাদানটি কন্টেইনারে থাকা আকারের উপর নির্ভর করে প্রকৃতপক্ষে এই আকারটি নাও থাকতে পারে বা ব্যবহারকারী নিজেই উপাদানটিকে পুনরায় আকার দিতে পারে।


আপনি সেটপ্রেফারড সাইজ (...) এর পুরো উদাহরণটি দেখাতে পারেন। আমি মনে করি এটি সহায়ক হবে।
ডগ হাউফ

4

আইআইআরসি ...

setSize উপাদানটির আকার নির্ধারণ করে।

setPreferredSizeপছন্দসই আকার নির্ধারণ করে। লেআউটম্যানার আপনার উপাদানগুলির জন্য এত জায়গার ব্যবস্থা করার চেষ্টা করবে।

এটি আপনি কোনও লেআউট ম্যানেজার ব্যবহার করছেন কিনা তা নির্ভর করে ...


এবং যদি আমি jframe এর জন্য একটি লেআউট ম্যানেজারকে স্পষ্টভাবে উল্লেখ না করে একটি jframe এ দুটি jpanel যুক্ত করি? জাপনেলগুলির আকার নির্ধারণ করতে আমার কোন পদ্ধতিটি ব্যবহার করা উচিত?
ডেভিড রোবলস

3
সামগ্রী প্যানগুলি ডিফল্টরূপে বর্ডারলআউট ব্যবহার করে ( java.sun.com/docs/books/tutorial/uiswing/layout/using.html )। সুতরাং জেফ্রেমের কন্টেন্টপ্যানে একটি লেআউট ম্যানেজার রয়েছে, তাই সেটপ্রিফার্ডসাইজে কাজ করা উচিত ..
মিকু

ভাল শোনাচ্ছে, তার মানে আমার ভিতরে জেফ্রেমের জন্য সেটসাইজ এবং অভ্যন্তরের উপাদানগুলির জন্য সেটপ্রফ্রেডসাইজ ব্যবহার করা উচিত
ডেভিড

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