پلتفرم Java SE با محیط توسعه IDE) NetBeans) ؛ (11)

وقتی یک فرم ایجاد می کنیم درواقع این یک فریم است. یک فریم خالی ایجاد کردیم و فقط از کادر آبی رنگ آن می توان استفاده کردو از فضای داخل آن نمی توان استفاده کرد. مثلا نمی توان به پس زمینه ی آن رنگ نسبت داد. هر چند که
چهارشنبه، 11 دی 1392
تخمین زمان مطالعه:
موارد بیشتر برای شما
پلتفرم Java SE با محیط توسعه IDE) NetBeans) ؛ (11)

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(11)

 

مترجم : حبیب الله علیخانی
منبع:راسخون



 

JPanel(پنل):

وقتی یک فرم ایجاد می کنیم درواقع این یک فریم است. یک فریم خالی ایجاد کردیم و فقط از کادر آبی رنگ آن می توان استفاده کردو از فضای داخل آن نمی توان استفاده کرد. مثلا نمی توان به پس زمینه ی آن رنگ نسبت داد. هر چند که در این حالت می توان از متد SetBackgrauond() استفاده کرد، علت آن این است که این متد به کتابخانه ی Java.AWT برمی گردد و همانطور که در قسمت Swing گفته شد تمامی کتابخانه های swing مبتنی بر AWT است(همان اپلت های جاوا) و چون کلاس JFrame از روی کلاس Form مشتق شده، در هر شرایطی این متد را دارد اما کاری انجام نمی دهد.
در تمامی زبانهای برنامه نویسی اشیا همدیگر را احاطه می کنند. Form ، Panel را احاطه می کند و panel ، تمام panel های داخلی و آنها تمام دکمه ها و.....
پس برای حل این مشکل از کلاس JPanle استفاده می کنیم. (کلاس JPanel ازکتابخانه ی Javax.swing است) .
پروژه ی بخش swing (بخش قبل) را دنبال می کنیم که کد های زیر را در کلاس Main دارد:

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(11)
این کار را به دو صورت می توان انجام داد. یک راه استفاده از پنجره ی Palette در صفحه ی Design است و با درگ و دراپ می توان به هر تعداد که می خواهیم Panel قرار دهیم. (البته اگر کلاس ما از JFrame ارث بری می کند یعنی JFram ساخته باشیم). اگرنخواهیم از Panel آماده استفاده کنیم و بخواهیم با کدنویسی انجام دهیم به صورت زیر عمل می کنیم:
ابتدا از کلاس JPanel نمونه می گیریم و سپس به آن رنگ زمینه(زرد) نسبت می دهیم(با استفاده از متد setBackground ) و در آخر برای استفاده آن در JFrame باید آن را به JFrame نسبت دهیم (با استفاده از متد add):

JPanel jpanel1 = new JPanel();
jpanel1.setBackground(Color.YELLOW);
frame1.add(jpanel1);

کدهای بالا را به پروژه ی قبلی وارد می کنیم و اجرا می کنیم :
وقتی از کلاس JPanel نمونه می گیریم، علامت hint در سمت چپ ظاهر شده که می بینیم می گوید JPanel را نمی شناسد و باید javax.swing.JPanel را Import کنیم. با کلیک کردن آن به صورت خودکار وارد می کند.
و قتی از Color استفاده می کنیم ، علامت hint در سمت چپ ظاهر شده که می بینیم می گوید Color را نمی شناسد و باید Java.AWT.Color را Import کنیم.با کلیک کردن آن به صورت خودکار وارد می کند.

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(11)
سپس اجرا می کنیم و خروجی به صورت زیر خواهد بود:

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(11)
دیدیم که با متد add() پنل را به Frame نسبت دادیم. اما بهتر است که برای پنل از متد setContentPane() استفاده کنیم و برای کامپوننت های دیگر مثل Button از add استفاده کنیم. خط مربوط به متد add() را کامنت می کنیم :

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(11)
و اگر اجرا بگیریم خروجی مثل بالا می شود.
با استفاده از متد setContentpane() می توانیم از متد setBackground() هم به گونه ای دیگر استفاده کنیم. خط مربوط به متد setBackground() را کامنت می کنیم و دستورات زیر را اضافه می کنیم:

frame1.getContentPane().setBackground(Color.red);


پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(11)
اکنون دوباره اجرا می کنیم، می بینیم همان کار قبلی را انجام داد و خروجی به صورت زیر می شود:

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(11)

button(دکمه):

این کار را به دو صورت می توان انجام داد. یک راه استفاده از پنجره ی Palette در صفحه ی Design است و با درگ و دراپ می توان به هر تعداد که می خواهیم Button قرار دهیم. (البته اگر کلاس ما از JFrame ارث بری می کند یعنی JFram ساخته باشیم). اگرنخواهیم از Button آماده استفاده کنیم و بخواهیم با کدنویسی انجام دهیم به صورت زیر عمل می کنیم:
پروژه ی قبلی را دنبال می کنیم و ابتدا از کلاس JButton نمونه می گیریم به نام jbtn1 :

JButton jbtn1=new JButton();

JButton یک کامپوننت از پکیج Javax.swing می باشد.
وقتی از کلاس JButton نمونه می گیریم، علامت hint در سمت چپ ظاهر شده که می بینیم می گوید JButton را نمی شناسد و باید javax.swing.JButton را Import کنیم. با کلیک کردن آن به صورت خودکار وارد می کند.
Button در متد سازنده ی خود 4 تا overload دارد. در بخش سازنده ها این مطلب را کاملا توضیح دادیم که سازنده مقادیر پیش فرض را برای Field های کلاس ایجاد کند. هر کدام ازاین 4 ، overload برای منظور های مختلفی به کار می روند. در اینجا ما از JButton(String text) استفاده می کنیم و متنی که می خواهیم روی button نمایش دهد را در قسمت String text تایپ می کنیم. (در این مثال می خواهیم دکمه ی OK را بسازیم)

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(11)
بعد از ساختن نمونه، اگرپروژه را اجرا کنیم Button را نمایش نمی دهد. چون باید آن را به JPanel نسبت دهیم یا add کنیم:

jpanel1.add(jbtn1);

این قسمت از کد به صورت زیر می باشد:

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(11)
که اگر پروژه را اجرا کنیم خروجی به شکل زیر است:

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(11)
با کلیک کردن آن هیچ عملی صورت نمی گیرد.
اکنون Button دیگری به نام Cancel به پروژه اضافه می کنیم :

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(11)
وقتی در اجرا اندازه ی فرم را تغییر دهیم این دو دکمه به طور اتواماتیک در وسط قرار می گیرد. یعنی چیدمان همیشه از وسط انجام می شود.
مانند ادیتور word تا زمانیکه سطر اول استفاده نشود به سطر های دیگر دسترسی ندارد مگر با Enter کردن به سطر های بعدی می رود. در اینجا هم همینطور است که اشیا تا وقتی که ردیف اول پر نشود به ردیف بعدی دسترسی ندارند.
اشیا مال JPanel هستند و برای JFrame نیستند. یعنی پدر(parent) آنها JPanel است.
در اینجا Layout مطرح می شود. Layout یعنی آرایش یا ترتیب وسایل یا طرح بندی. Layout ها مال پکیج Java.AWT است. ما ابتدا این پکیج را به پروژه import می کنیم تا همه ی کلاسهای Layout را نمایش دهد. وقتی که Layout مورد نظر را انتخاب کردیم خودش پکیج مربوط به آن را import می کندو بعد از آن پکیج کلی java.awt.LayoutManager را حذف می کنیم:

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(11)
برای استفاده از این Layout ها باید از انها نمونه بسازیم چون کلاس هستند و برای استاده از کلاسها نمی توان از نام آنها استفاده کرد، باید از نمونه ی آنها استفاده کرد. و سپس آن را به اشیا نسبت می دهیم. مثلا می خواهیم در زیر BorderLayout را به JPanel1 نسبت دهیم. دستور زیر را تایپ می کنیم:

) jpanel1.setLayout(New

وقتی بعد از تایپ New ، CTRL+Space را می زنیم، می بینیم کلاسهای Layout زیادی وجود دارند مانند:

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(11)
FlowLayout : Layout جاری ای است که در حال حاضر در حال استفاده است.
GridLayout : به صورت جدول تمام سطر ها را تقسیم می کند.
BorderLayout : تمام فرم را پوشش می دهد.
و....
اکنون به عنوان تمرین، از بین این لیست ارائه شده BorderLayout را انتخاب می کنیم. بعد از انتخاب آن پکیج مربوط به آن import می شود(java.awt.BorderLayout). همانطور که در بالا گفته شد اکنون پکیج java.awt.LayoutManager دیگر بلا استفاده است و ما آن را حذف می کنیم.
پس کد به صورت زیر می شود:

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(11)
سپس اجرا می کنیم و خروجی زیر را می دهد:

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(11)
این خروجی نشان می دهد که دکمه ی Cancel کل فرم را فرا گرفته است. این خصوصیت BorderLayout است.
اگر GridLayout را انتخاب کنیم، (پکیج آن اضافه شد) ، خروجی به صورت زیر می شود:

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(11)
که به صورت جدول تمام سطر ها را تقسیم کرد. اگر تعداد دکمه ها بیشتر باشد، به تعداد آنها تقسیم می کند.
حال به قبل بر می گردیم و می خواهیم دو دکمه ی Ok و Cancel در مکان خاصی قرار گیرند. برای این کار ابتدا ، 1- پارامتر ورودی متد setLayout را null قرار دهیم و 2- سپس برای دکمه ها موقعیت مکانی تعریف می کنیم.
اگر ما پارامتر ورودی متد setLayout را null قرار دهیم ، هیچ Layout ای را نمی پذیرد. خروجی به صورت زیر می شود : (کد آن در کادر نارنجی)

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(11)
وقتی Layout پنل دربرگیرنده را null کنیم، تمام اشیا درون آن هیچ ابعاد و موقعیت مکانی ندارند و دیده نمی شوند.
حال می خواهیم بگوییم که این دکمه ها چه ابعادی داشته باشند و در چه موقعییت ای قرار گیرند. برای این کار از متد setBound() استفاده می کنیم، همانگونه که برای شی frame1 این کار را انجام داده ایم. مانند تصویر زیر، اعداد را وارد کردیم و اجرا کردیم:

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(11)
دیدیم که سایز هر دو دکمه ی Ok و Cancel متفاوت و در موقعیت مختلف قرار گرفتند. اگر سایز دکمه ی Cancel را کوچکتر از متن آن تعریف کنیم به صورت زیر نشان داده می شود:

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(11)
بخش JButton و JPanel در اینجا به پایان می رسد.
استفاده از مطالب این مقاله با ذکر منبع راسخون بلامانع می باشد.



 

 



مقالات مرتبط
نظرات کاربران
ارسال نظر
با تشکر، نظر شما پس از بررسی و تایید در سایت قرار خواهد گرفت.
متاسفانه در برقراری ارتباط خطایی رخ داده. لطفاً دوباره تلاش کنید.
مقالات مرتبط
موارد بیشتر برای شما
بررسی مرقع و قطاع در خوشنویسی
بررسی مرقع و قطاع در خوشنویسی
خیابانی: آقای بیرانوند! من بخواهم از نام بردن تو معروف بشوم؟ خاک بر سر من!
play_arrow
خیابانی: آقای بیرانوند! من بخواهم از نام بردن تو معروف بشوم؟ خاک بر سر من!
توضیحات وزیر رفاه در خصوص عدم پرداخت یارانه
play_arrow
توضیحات وزیر رفاه در خصوص عدم پرداخت یارانه
حمله پهپادی حزب‌ الله به ساختمانی در نهاریا
play_arrow
حمله پهپادی حزب‌ الله به ساختمانی در نهاریا
مراسم تشییع شهید امنیت وحید اکبریان در گرگان
play_arrow
مراسم تشییع شهید امنیت وحید اکبریان در گرگان
به رگبار بستن اتوبوس توسط اشرار در محور زاهدان به چابهار
play_arrow
به رگبار بستن اتوبوس توسط اشرار در محور زاهدان به چابهار
دبیرکل حزب‌الله: هزینۀ حمله به بیروت هدف قراردادن تل‌آویو است
play_arrow
دبیرکل حزب‌الله: هزینۀ حمله به بیروت هدف قراردادن تل‌آویو است
گروسی: فردو جای خطرناکی نیست
play_arrow
گروسی: فردو جای خطرناکی نیست
گروسی: گفتگوها با ایران بسیار سازنده بود و باید ادامه پیدا کند
play_arrow
گروسی: گفتگوها با ایران بسیار سازنده بود و باید ادامه پیدا کند
گروسی: در پارچین و طالقان سایت‌های هسته‌ای نیست
play_arrow
گروسی: در پارچین و طالقان سایت‌های هسته‌ای نیست
گروسی: ایران توقف افزایش ذخایر ۶۰ درصد را پذیرفته است
play_arrow
گروسی: ایران توقف افزایش ذخایر ۶۰ درصد را پذیرفته است
سورپرایز سردار آزمون برای تولد امیر قلعه‌نویی
play_arrow
سورپرایز سردار آزمون برای تولد امیر قلعه‌نویی
رهبر انقلاب: حوزه‌ علمیه باید در مورد نحوه حکمرانی و پدیده‌های جدید نظر بدهد
play_arrow
رهبر انقلاب: حوزه‌ علمیه باید در مورد نحوه حکمرانی و پدیده‌های جدید نظر بدهد
حملات خمپاره‌ای سرایاالقدس علیه مواضع دشمن در جبالیا
play_arrow
حملات خمپاره‌ای سرایاالقدس علیه مواضع دشمن در جبالیا
کنایه علی لاریجانی به حملات تهدیدآمیز صهیونیست‌ها
play_arrow
کنایه علی لاریجانی به حملات تهدیدآمیز صهیونیست‌ها