مترجم:حبیب الله علیخانی
منبع:راسخون
منبع:راسخون
1- Swing Containers
این بخش شامل کامپوننت های زیر است:
وقتی یک فرم ایجاد می کنیم درواقع این یک فریم است. یک فریم خالی ایجاد کردیم و فقط از کادر آبی رنگ آن می توان استفاده کردو از فضای داخل آن نمی توان استفاده کرد. مثلا نمی توان به پس زمینه ی آن رنگ نسبت داد. پس برای حل این مشکل از کلاس JPanle استفاده می کنیم.
در یکی از بخش های گذشته در مورد آن و نحوه ی استفاده از آن شرح داده ایم. به آن رجوع کنید.
برای ساخت tabbed ها مختلف در برنامه از این کلاس استفاده می کنیم , هر کدام از tabbed ها دارای container های جدا برای خود هستند به صورت جدا handel میشوند. کاربر با انتخاب هر کدام از تب ها می تواند از امکانات و محتویات اون تب به صورت جداگانه استفاده کند.
وقتی در فرم شی tabbedpane را اضافه می کنیم، یک panel عادی است اما اگر بخواهیم tab ایجاد کنیم باید درآن panel درگ کنیم. فقط باید دقت کنیم که زمانیکه می خواهیم panel را در فرم قرار دهیم، (مانند شکل زیر) وقتی tabbedpane به صورت نقطه چین شد آن را رها کنیم:
با کلیک روی آن و تایپ روی خود آن می توان متن آن را تغییر داد (در بعضی از اشیا باید از طریق پنجره ی properties تغییر داد). که خروجی آن به صورت زیر می باشد:
در زیر پروژه ای را معرفی می کنیم که از طریق کد نویسی (نه از طریق پنجره ی Palette) TabbedPane ایجاد کردیم.
دریک پروژه، کلاس tabbedpane را ایجاد کردیم و کد های زیر را درآن وارد کردیم:
که خروجی آن به صورت زیر می باشد:
JSplitPane برای تقسیم دو کامپوننت استفاده می شود که شامل 2 تا JPanel است که متن داخل آن به صورت عمودی یا افقی مرتب شده است.کامپوننت ها به طور متقابل می توانند توسطuser تغییر سایز دهند. دو کامپوننت در یک SplitPane می توانند با استفاده از JSplitPane.HORIZONTAL_SPLIT به صورت چپ به راست تنظیم گردند. یا با استفاده از JSplitPane.VERTICAL_SPLIT به صورت بالا به پایین تنظیم گردند.
با کشیدن جدا کننده ی که بین اجزا وجود دارد، کاربر می تواند مشخص کند که هر بخش چه مقدار از کل فضای SplitPane را داشته باشد. شما می توانید فضای صفحه را در میان سه یا چند جز با قرار دادن SplitPane در داخل SplitPane تقسیم کنید که SplitPane تو در تو نام دارد. به جای اضافه کردن اجزای مورد علاقه به طور مستقیم به SplitPane ، شما می توانید هر جزء را داخل پانل اسکرول(scroll pane) قراردهید. بعد از آن شما پانل اسکرول را داخل SplitPane قرار دهید.
به عنوان مثال عکس زیر اندازه اجزای SplitPane و قرار دادن جداکننده را نشان می دهد:
در زیر پروژه ای را معرفی می کنیم که از طریق کد نویسی (نه از طریق پنجره ی Palette) SplitPane ایجاد کردیم.
دریک پروژه، کلاس splitpane را ایجاد کردیم و کد های زیر را درآن وارد کردیم:
که خروجی آن به صورت زیر می باشد:
یک JScrollpane یک از یک کامپوننت قابل اسکرول(قابل پیمایش) را فراهم می کند. هنگامی که صفحه نمایش محدود است، از یک ScrollPane برای نمایش یک کامپوننت بزرگ استفاده می شود، تا به طور اتوماتیک تغییر کند.
در اینجا یک عکس فوری از یک برنامه کاربردی است که از پنجره ScrollPane سفارشی استفاده می کند:
ScrollPane ممکن است دو نمونه از JScrollBar برای میله اسکرول استفاده کند. شکل زیر سه منطقه از نواراسکرول
نشان می دهد:
هنگامی که شما ScrollPane ایجادمی کنید، سازنده ارائه شده توسط JScrollPane، دو اجازه را برای مفدار دهی به شما می دهد:
JScrollPane(Component, int, int)
JScrollPane(int, int)
اولین int نوار اسکرول عمودی را مشخص می کند. دومین int برای نوار اسکرول افقی می باشد.
باید به این نکته توجه کنید که اسکرول بار عمودی در صورتی که شما اندازه ی JScrollPane را کم کنید ظاهر می شود و اگر از یک حدی زیاد شود ناپدید می شود.
در زیر پروژه ای را معرفی می کنیم که از طریق کد نویسی (نه از طریق پنجره ی Palette) Scrollbar ایجاد کردیم.
دریک پروژه، کلاس Scrollbar را ایجاد کردیم و کد های زیر را درآن وارد کردیم:
ابتدا آرایه ای از نوع رشته به نام address ایجاد کردیم که مقادیرخاص رشته ای دارد و سپس از کلاس JPanel نمونه ای به نام p ساختیم وبعد از آن همه ی مقادیر آرایه را به صورت JLabel به پنل p اضافه کردیم.
چون سایز frame ای ما در پایین تعریف کردیم نسبت به تعداد اعضای آرایه کوچک است باید برای آن Scrollpane ایجاد کنیم و به Frame نسبت دهیم. که این کاررا با نمونه گیری از JScrollpane ونسبت دادن به Frame به پایان می بریم. در شکل بالا خروجی را هم می بینید.
یک JToolBar محفظه ای است که چندین کامپوننت (معمولا Button به همراه آیکن) درداخل یک سطر یا ستون دسته بندی کرده است. اغلب toolbarها دسترسی آسان را که در منو ها هم است، را فراهم می کنند.
مثال زیر را در JFrame درنظر بگیرید.
ابتدا یک Toolbar را فرم اضافه می کنیم و آن را به اندازه ای که می خواهیم گسترش می دهیم:
در Toolbar ایجاد شده می توانیم به هر تعداد button قرار دهیم:
می توان روی هر کدام کلیک راست کرد و گزینه ی Edit text را انتخاب کرد و متن دکمه ها را تغییر داد ویا در جدول properties هر کدام با استفاده از گزینه ی icon ، به هر کدام که می خواهیم یک عکس نسبت دهیم.
عکس ها را در پوشه ی src ، از این پروژه قرار می دهیم واز گزینه ی Image Within Project آن را وارد می کنیم
اگر خواستیم عکس را از پروژه ی دیگر وارد کنیم، گزینه ی External Image را انتخاب می کنیم. سپس می توان از مسیر زیر به دکمه ها event نسبت داد و برای هر دکمه کاری را تعیین کرد(در بخش event مفصل توضیح داده می شود).
> Event > Action > action performed کلیک راست روی دکمه
برنامه ی زیر ایجاد یک ToolBar بر روی یک textarea است(از طریق کد، نه Jframe). هر کدام از دکمه های این toolbar یک image icon دارند و به صورت معمولی به آن ها action می دهیم.
کلاس JToolbarExample را ایجاد کردیم و کد های زیر را درآن وارد کردیم:
در خط 19 - 21 با یک متد جدید آشنا می شویم یعنی Tool tip . Tool Tip ها نوشته های کوچکی هستند که با نگه داشتن بر روی دکمه یا lable یا هر چیز دیگری نمایش داده می شود.
تابع getButton را برای این نوشتیم که یک IMage Button ایجاد می کند, نام عکس مورد نظر را به عنوان ورودی می گیرد و دکمه را ایجاد می کند.
در خط 23 نیز با نحوه ی فراخوانی و ایجاد JToolBar آشنا می شوید.
با استفاده ازکلاس JInternalFrame شما می توانید یک پنجره JFrame را بین پنجره ی دیگر مشاهده کنید. معمولا Internalframe را در یک desktop pane اضافه می کنند.ممکن است desktop pane به عنوان content pane یک فریم استفاده شود. desktop pane یک نمونه از JDesktopPane است.
سویچینگ از internal frames (فرم داخلی) به فرم معمولی و برعکس کار ساده ای نیست.
در زیرعکسی از یک برنامه کاربردی که دو internal frame (فرم داخلی) داخل یک فرم معمولی دارد را می بینید:
در بسیاری از اوقات کد های استفاده از internal frame شبیه کد های استفاده از Frame معمولی می باشد. همچنین تنظیمات GUI برای JInternalFrame با تنظیمات GUI برای JFrame شباهت زیادی دارد.
internal frame ها دربرگیرنده ی سطح بالا(top-level) نیستند . برای مثال شما باید internal frame را به دربرگیرنده(معمولا یک JDesktopPane ) اضافه کنید. یک internal frame نمی تواند ریشه ی یک سلسله مراتب باشد. همچنین برای internal frame نمی توان رویداد در نظر گرفت.
به وسیله ی JDesktopPane ما می توانیم یک دسکتاپ مجازی در برنامه ایجاد کنیم یا چندین صفحه را در برنامه همزمان در داخل Frame ( نه خارج آن ) باز کنیم.
در داخل JDesktopPane ما می توانیم یک کامپوننت به نام JInternalFrame را add کنیم.
دریک پروژه، کلاس JDesktopPaneExample را ایجاد کردیم و کد های زیر را درآن وارد کردیم:
که خروجی آن به صورت زیر می باشد:
یک Layered Pane یک دربرگیرنده ی Swing است که برای قرار گرفتن کامپوننت ها به صورت سه بعدی در نظر گرفته شده. وقتی یک کامپوننت را به Layered Pane اضافه می کنیم، عمق را به صورت Integer تعین می کنیم. عدد بیشتر برای کامپوننت "closer" که در دربرگیرنده در بالاترین مکان قرار گرفته، می باشد. اگر کامپوننت ها روی هم قرار گرفتند، کامپوننت های "closer" ، در بالای کامپوننت با عمق پایین تر، رسم می شوند.
در زیر عکسی از یک برنامه کاربردی را می بینید که یک Layered Pane ایجاد کرده و همپوشانی و Label های رنگی در عمق ها(ارتفاع ها) ی متفاوت را قرار داد:
استفاده از مطالب این مقاله با ذکر منبع راسخون بلامانع است.
این بخش شامل کامپوننت های زیر است:
Panel
عنصر panel از کلاس JPanel است. کلاس JPanel به صورت شکل زیر از کلاسهای دیگر ارث بری کرده است:در یکی از بخش های گذشته در مورد آن و نحوه ی استفاده از آن شرح داده ایم. به آن رجوع کنید.
TabbedPane
عنصر TabbedPane از کلاس JTabbedPane است. کلاس JTabbedPane به صورت شکل زیر از کلاسهای دیگر ارث بری کرده است:وقتی در فرم شی tabbedpane را اضافه می کنیم، یک panel عادی است اما اگر بخواهیم tab ایجاد کنیم باید درآن panel درگ کنیم. فقط باید دقت کنیم که زمانیکه می خواهیم panel را در فرم قرار دهیم، (مانند شکل زیر) وقتی tabbedpane به صورت نقطه چین شد آن را رها کنیم:
دریک پروژه، کلاس tabbedpane را ایجاد کردیم و کد های زیر را درآن وارد کردیم:
SplitPane
عنصر SplitPane از کلاس JSplitPane است. کلاس JSplitPane به صورت شکل زیر از کلاسهای دیگر ارث بری کرده است:با کشیدن جدا کننده ی که بین اجزا وجود دارد، کاربر می تواند مشخص کند که هر بخش چه مقدار از کل فضای SplitPane را داشته باشد. شما می توانید فضای صفحه را در میان سه یا چند جز با قرار دادن SplitPane در داخل SplitPane تقسیم کنید که SplitPane تو در تو نام دارد. به جای اضافه کردن اجزای مورد علاقه به طور مستقیم به SplitPane ، شما می توانید هر جزء را داخل پانل اسکرول(scroll pane) قراردهید. بعد از آن شما پانل اسکرول را داخل SplitPane قرار دهید.
به عنوان مثال عکس زیر اندازه اجزای SplitPane و قرار دادن جداکننده را نشان می دهد:
دریک پروژه، کلاس splitpane را ایجاد کردیم و کد های زیر را درآن وارد کردیم:
ScrollPane
عنصر ScrollPane از کلاس JScrollPane است. کلاس JScrollPane به صورت شکل زیر از کلاسهای دیگر ارث بری کرده است:در اینجا یک عکس فوری از یک برنامه کاربردی است که از پنجره ScrollPane سفارشی استفاده می کند:
نشان می دهد:
JScrollPane(Component, int, int)
JScrollPane(int, int)
اولین int نوار اسکرول عمودی را مشخص می کند. دومین int برای نوار اسکرول افقی می باشد.
باید به این نکته توجه کنید که اسکرول بار عمودی در صورتی که شما اندازه ی JScrollPane را کم کنید ظاهر می شود و اگر از یک حدی زیاد شود ناپدید می شود.
در زیر پروژه ای را معرفی می کنیم که از طریق کد نویسی (نه از طریق پنجره ی Palette) Scrollbar ایجاد کردیم.
دریک پروژه، کلاس Scrollbar را ایجاد کردیم و کد های زیر را درآن وارد کردیم:
چون سایز frame ای ما در پایین تعریف کردیم نسبت به تعداد اعضای آرایه کوچک است باید برای آن Scrollpane ایجاد کنیم و به Frame نسبت دهیم. که این کاررا با نمونه گیری از JScrollpane ونسبت دادن به Frame به پایان می بریم. در شکل بالا خروجی را هم می بینید.
Tool Bar
عنصر Toolbar از کلاس JToolbar است. کلاس JToolbar به صورت شکل زیر از کلاسهای دیگر ارث بری کرده است:مثال زیر را در JFrame درنظر بگیرید.
ابتدا یک Toolbar را فرم اضافه می کنیم و آن را به اندازه ای که می خواهیم گسترش می دهیم:
اگر خواستیم عکس را از پروژه ی دیگر وارد کنیم، گزینه ی External Image را انتخاب می کنیم. سپس می توان از مسیر زیر به دکمه ها event نسبت داد و برای هر دکمه کاری را تعیین کرد(در بخش event مفصل توضیح داده می شود).
> Event > Action > action performed کلیک راست روی دکمه
برنامه ی زیر ایجاد یک ToolBar بر روی یک textarea است(از طریق کد، نه Jframe). هر کدام از دکمه های این toolbar یک image icon دارند و به صورت معمولی به آن ها action می دهیم.
کلاس JToolbarExample را ایجاد کردیم و کد های زیر را درآن وارد کردیم:
تابع getButton را برای این نوشتیم که یک IMage Button ایجاد می کند, نام عکس مورد نظر را به عنوان ورودی می گیرد و دکمه را ایجاد می کند.
در خط 23 نیز با نحوه ی فراخوانی و ایجاد JToolBar آشنا می شوید.
Internal Frame
عنصر Internal Frame از کلاس JInternalFrame است. کلاس JInternalFrame به صورت شکل زیر از کلاسهای دیگر ارث بری کرده است:سویچینگ از internal frames (فرم داخلی) به فرم معمولی و برعکس کار ساده ای نیست.
در زیرعکسی از یک برنامه کاربردی که دو internal frame (فرم داخلی) داخل یک فرم معمولی دارد را می بینید:
internal frame ها دربرگیرنده ی سطح بالا(top-level) نیستند . برای مثال شما باید internal frame را به دربرگیرنده(معمولا یک JDesktopPane ) اضافه کنید. یک internal frame نمی تواند ریشه ی یک سلسله مراتب باشد. همچنین برای internal frame نمی توان رویداد در نظر گرفت.
Desktop Pane
عنصر Desktop Pane از کلاس JDesktopPane است. کلاس JDesktopPane به صورت شکل زیر از کلاسهای دیگر ارث بری کرده است:در داخل JDesktopPane ما می توانیم یک کامپوننت به نام JInternalFrame را add کنیم.
دریک پروژه، کلاس JDesktopPaneExample را ایجاد کردیم و کد های زیر را درآن وارد کردیم:
Layered Pane
عنصر Layered Pane از کلاس JLayeredPane است. کلاس JLayeredPane به صورت شکل زیر از کلاسهای دیگر ارث بری کرده است:در زیر عکسی از یک برنامه کاربردی را می بینید که یک Layered Pane ایجاد کرده و همپوشانی و Label های رنگی در عمق ها(ارتفاع ها) ی متفاوت را قرار داد:
/ج