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



 
استفاده درست از مبحث وراثت و سازنده در ایجاد JFrame و کامپوننت به صورت استاندارد
ابتدا به دو طریق یک JFrame ایجاد می کنیم.
حالت اول : اگر یک کلاس (به نام JFrame1) از طریق New > JFrame Form.. ایجاد می کنیم، بدنه سورس آن به صورت زیر خواهد بود:
خروجی بعد از اجرا، هم فرم دارد و هم اگر چیزی چاپ شود و یا کاربر وارد کند در پنجره ی output پایین خواهیم دید.(در بخش swing control ها دیدیم)
حالت دوم : اما وقتی یک کلاس (به نام JFrame2) را از طریق New > Java Class ایجاد می کنیم، بدنه سورس آن به صورت زیر خواهد بود:
package JFrame;
public class JFrame2 {
}
در این حالت کلاس ما گرافیکی نیست و خروجی بعد از اجرا، فرم ندارد و فقط در پنجره ی output پایین خروجی را خواهیم دید. اما اگر بخواهیم در این حالت کلاس ما گرافیکی باشد، کلاس ما می تواند با کلمه ی کلیدی extends از کلاس JFrame ارث بری کند و اینجاست که ما کلاسمان را به صورت گرافیکی تعریف کردیم(چون کلاسمان از JFrame مشتق شده پس به تمامی مشخصات و Property های آن دسترسی دارد). اکنون برای نمایش کلاسمان باید (درتابع main) از آن نمونه بسازیم و کدهای نمایش فرم را وارد کنیم. این مبحث را در بخش واسط های گرافیکی در جاوا(chapter-10-GUI-Swing-Frame) کامل توضیح دادیم و این کد ها را در پروژه های بخش swing ها هم می بینید.
اما مطلبی که است، این است که ما روش دوم را ترجیح می دهیم چون می توانیم برای کلاسمان یک سازنده بنویسیم(می دانیم که سازنده برای مقدار دهی اولیه می باشد و هم نام کلاس است).
پس می توان دو خط زیر( بجز setVisible) را در سازنده (هم نام کلاس به نام JFrame2) نوشت:
اما زمانیکه این کد ها را سازنده می نویسیم دیگر از نام نمونه ی jf استفاده نمی کنیم چون نمی خواهیم این مقادیر اولیه مختص jf شود، بلکه می خواهیم هر بار از روی کلاس JFrame2 نمونه می سازیم، دارای این خاصیت باشند. در اینجاست که از کلمه ی کلیدی this استفاده می کنیم که this به خود کلاس اشاره می کند:
این یک استفاده درست از مبحث وراثت وسازنده است.
دو خط کد زیر را هم می توان به طور پیشرفته تر نوشت و خلاصه سازی کرد :
JFrame2 jf=new JFrame2();
jf.setVisible(true);
بجای این دو خط، از یک خط زیر استفاده می کنیم که به محض ایجاد، نشان داده می شود(visible آن true می شود) و ما به آبجکت jf دسترسی نداریم. و همه ی کارها سازنده انجام می دهد و ما نیازی به آن نداریم.
می بینیم کد نویسی کمتر شده است.

در قسمت های قبل ما از واژه ای بنام this استفاده کردیم. این کلمه به معنای شی جاری می باشد و به برنامه نویس کمک می کند تا سطح دید خود را در برنامه مشخص کند. با استفاده از کلمه this ما به JDK اعلام می کنیم که متغیر مد نظر ما متغیر مربوط به کلاس است.
این نکته را به خاطر داشته باشید که می توانیم به جای کلمه this از نام کلاس هم استفاده کنیم. مثلا در کلاس student ، می خواهیم سن(age) را چاپ کند:
System.out.println(this.age);
System.out.print(student.age);
اکنون می خواهیم به کلاسمان، کامپوننت اضافه کنیم مانند JPanel :
در این حالت، آن را در متد main و متد سازنده تعریف نمی کنیم. بلکه آن را به صورت اعضای کلاس معرفی می کنیم و چون می خواهیم به صورت اعضای کلاس معرفی کنیم، به صورت سراسری تعریف می کنیم. سپس در متد سازنده آن را new می کنیم. کد استاندارد به این صورت است که همه ی اشیائی که قرار است new شوند، در متد سازنده new شوند.
اکنون کد را به صورت زیر تغییر می دهیم و خروجی را هم مشاهده می کنید:
برای اینکه این مطلب را بهتر فرا بگیرید، مثال دیگری را در نظر می گیریم:
می خواهیم دکمه(Button) ی Exit را برای فرم تعریف کنیم و با فشردن آن، فرم بسته شود.
ابتدا آن را به صورت اعضای کلاس معرفی کنیم و سپس در متد سازنده آن را new می کنیم و سپس آن را به Jpanel ، Add می کنیم .
اکنون کد را به صورت زیر تغییر می دهیم و خروجی را هم مشاهده می کنید:

تا اینجای کد، این دکمه کاری انجام نمی دهد. ما می خواهیم به محض فشرده شدن دکمه ی "خروج" از فرم خارج شود. برای این کار باید از رویداد یا event استفاده کنیم. اکنون وارد مبحث جدیدی می شویم که اهمیت بسیاری دارد با همین خاطر آن را در بخشی مجزا مطرح می کنیم.