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



 

طراحی کامپوننت

گاهی از اوقات ما از یک چیدمان کامپوننت ها زیاد استفاده می کنیم. برای اینکه از یک طراحی تکراری بپرهیزیم، کامپوننت سفارشی تعریف می کنیم تا همیشه یک دسته کامپوننت آماده داشته باشیم تا در وقت صرفه جویی کنیم. با این کار یک شی می سازیم که در پنجره ی palette یک گروه می سازد مانند گروه Swing containers و یا Swing controls.
یک پروژه ی Swing از Java Class Library می سازیم و آن را به پنجره ی palette ، add می کنیم.
فرض کنید از یک Textfield به همراه Label زیاد استفاده می کنیم. می خواهیم این دو را با هم به صورت کامپوننت سفارشی در آوریم.
ابتدا یک پروژه ایجاد می کنیم اما این بار یک Java Application ایجاد نمی کنیم، و Java Class Library به نام Label.Textfield.Lib ایجاد می کنیم:
در ایجاد این نوع پروژه ها مانند پروژه های Java Application گزینه ی ایجاد تابع Main نداریم (البته در Java Application هم مشابه این است و می توانیم تابع Main را پاک کنیم).
ابتدا در این پروژه یک پکیج به نام Label.Textfield ایجاد می کنیم. در این پکیج بجای ایجاد یک کلاس Form JFrame ، یک کلاس JPanel Form می سازیم:
JPanel Form ، Parent اشیا ما است. نام JPanel Form را دقیقا به نام شی ای که می خواهیم ایجاد کنیم می گذاریم (MyLabelTextfield).
این کلاس چون تابع Main ندارد، در نتیجه خروجی(output) هم ندارد و صرفا یک شی است و فضایی را اشغال کرده است. بعد از این، اشیا مورد نظرمان را در آن می چینیم:
بعد از آن روی پروژه کلیک راست کرده و آن را Build می کنیم. خروجی این پروژه یک Jar فایل است و قابلیت اجرایی ندارد و فقط یک کتابخانه است.
بعد از Build ، در پنجره ی output مسیری که این Jar فایل ها در آن ساخته شده است را نشان می دهد:
اکنون می خواهیم این Jar فایل ها را نصب کنیم. ابتدا از مسیر زیر می رویم:
Tools> palette> Swing/AWT Components
در صفحه ی باز شده از طریق گزینه ی New Category.. ، یک Category (دسته) جدید به نام My Control ایجاد می کنیم:
بعد از Ok کردن همانطور که در شکل زیر می بینید، یک دسته به نام My Control ایجاد شده است. با انتخاب آن و سپس گزینه ی Add from JAR.. ، آدرس Library ای که ساخته بودیم و مسیر آن در output نشان داده شده بود را به آن وارد می کنیم.
در مراحل اضافه کردن باید category ای که ساخته بودیم را انتخاب کنیم:
بعد از این در هر پروژه ای که قرار بگیریم، در پنجره ی palette یک گروه دیگر به نام My control هم داریم:
وقتی از آن در پروژه ها استفاده می کنیم، زمانی که به Properties می رویم، همه ی خصوصیات برای panel است و برای Textfield و Label نیستند. Label و Textfield اعضای Panel هستند. برای اینکه به آن Property اضافه کنیم، به همان پروژه ی Librarye ای که ساختیم به نام Label.Textfield.Lib می رویم و کلاس Jpanel form ای که ساختیم را باز می کنیم.
در گذشته مبحث کپسوله سازی(encapsulating) را بررسی کردیم که با آن برای کلاس های جاوا در قالب get وset ، Property می نوشتیم.
به عنوان مثال می خواهیم برای textfield یک property ای به نام Mytext بسازیم تا هر جا که از آن استفاده می کنیم بتوانیم نام آنها را تغییر دهیم.
کد های زیر را اضافه می کنیم:
و همین طور برای label هم یک property به نام Mylabel می سازیم تا هر جا که از آن استفاده می کنیم بتوانیم نام آنها را تغییر دهیم.
کد های زیر را اضافه می کنیم:
بعد اضافه کردن این کد ها پروژه را Build می کنیم تا Jar ها آپدیت شوند.
یک property به نام Mytext و Mylabel در پنجره ی Properties هم اضافه می شود.