♨️ جلسه سیزدهم - کلاس JPopupMenu در جاوا
یکی دیگر از اجزای گرافیکی که جاوا برای ساخت برنامه های دسکتاپی ارائه کرده کلاس JPopupMenu است.
کلاس PopupMenu منویی است که میتواند بصورت پویا در یک موقعیت مشخص در یک اجزای گرافیکی ظهور کند. برای درک بهتر از شکل ظاهری PopupMenu میتوانیم به مثال کلیک سمت راست در صفحه دسکتاپ کامپیوتر اشاره کنیم،وقتی ما در یک موقعیت مشخص از صفحه دسکتاپ با موس کلیک سمت راست میکنیم یک لیستی از گزینه ها نمایش داده میشود که این لیست همان PopupMenu است.تصویر(1)
• همان طور که میدانید ما در هر مکان یا موقعیت از صفحه دکستاپ کلیک سمت راست کنیم این منو پویا نمایش داده میشود. خب در این جلسه قصد داریم روش ساخت این منو را یاد بگیریم که با کلیک کردن ( راست یا چپ) موس در برنامه خود یک PopupMenu نمایش داده شود.
• سازنده های پرکاربرد کلاس JPopupMenu :
توصیف | سازنده |
برای ایجاد یک JPopupMenu بدون پارامتر | JPopupMenu() |
برای ایجاد یک JPopupMenu با عنوان مشخص | JPopupMenu(String label) |
خب توضیحات زیادی هم خوب نیست! بریم سراغ حل مثال :-)
مثال:
package javalike ; import javax.swing.*; import java.awt.event.*; class PopupMenuExample { PopupMenuExample() { final JFrame f = new JFrame("PopupMenu Example"); final JPopupMenu popupmenu = new JPopupMenu("Edit"); JMenuItem cut = new JMenuItem("Cut"); JMenuItem copy = new JMenuItem("Copy"); JMenuItem paste = new JMenuItem("Paste"); popupmenu.add(cut); popupmenu.add(copy); popupmenu.add(paste); f.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { popupmenu.show(f, e.getX(), e.getY()); } }); f.add(popupmenu); f.setSize(300, 300); f.setLayout(null); f.setVisible(true); } public static void main(String args[]) { new PopupMenuExample(); } } |
خروجی: برنامه هنگام اجرا به صورت تصویر(2) خواهد بود:
• حال اگر هر جایی از فریم برنامه کلیک سمت راست یا چپ کنیم JPopupMenu ما نمایش داده میشود.تصویر(3)
final JPopupMenu popupmenu = new JPopupMenu("Edit"); |
• مثل هر اجزای گرافیکی دیگر برای استفاده از JPopupMenu از آن شی ایجاد کرده و متنی را که نقش عنوان منوی ما را دارد جایگزین پارامتر سازنده آن میکنیم.
JMenuItem cut = new JMenuItem("Cut"); JMenuItem copy = new JMenuItem("Copy"); JMenuItem paste = new JMenuItem("Paste"); |
• آیتم های JPopupMenu خود را با استفاده از کلاس JMenuItem میسازیم.متن درون سازنده کلاس JMenuItem عنوان هر آیتم را نشان میدهد.
popupmenu.add(cut); popupmenu.add(copy); popupmenu.add(paste); |
• آیتم های خود را به منو JPopupMenu خود اضاف میکنیم.
f.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { popupmenu.show(f, e.getX(), e.getY()); } }); |
• همان طور که در ابتدا گفتیم JPopupMenu با کلیک کردن موس در یک مکان از برنامه نمایش داده میشود.پس ما باید از دستوری استفاده کنیم که بتواند رویداد مربوط به کلیک کردن موس در برنامه را شناسایی و دریافت کند و سپس عمل مورد نظر ما را اجرا کند.
• MouseAdapter یک کلاس انتزاعی یا abstract است که برای دریافت رویدادهای مربوط به موس استفاده میشود. منظور از رویدادهای موس همان کلیک کردن و دکمه های موس است.
• کلاس MouseAdapter در بدنه خودش متدهایی دارد که یکی از آنها متد mouseClicked است، متد mouseClicked وظیفه اش دریافت رویدادهای مربوط به کلیک کردن موس است، یعنی بار هر بار کلیک کردن موس این متد صدا زده میشود، و دستورات درون بدنه آن اجرا میشود.
• addMouseListener برای ثبت رویدادهای مربوط به موس در یک اجزای گرافیکی استفاده میشود. مثلا در اینجا شی f که از نوع کلاس JFrame هستش این متد را صدا زده است.این باعث میشه هر کجای فریم با موس کلیک کنیم، رویداد رخ داده به فریم اضاف شود. به بیان ساده تر این متد باعث میشه frame به کلیک کردن موس روی آن حساس شود.
f.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { popupmenu.show(f, e.getX(), e.getY()); } }); |
• در دستور بالا برای اضاف کردن رویداد موس به فریم متد addMouseListener را صدا زده ایم.
• شی از کلاس انتزاعی MouseAdapter به جای پارامتر متد addMouseListener ایجاد میکنیم.
• متد mouseClicked را overrid یا بازنویسی میکنیم.
popupmenu.show(f, e.getX(), e.getY()); |
• متد show یکی از متدهای مربوط به کلاس JPopupMenu است. این متد برای نمایش منو JPopupMenu در مختصات x و y اجزای گرافیکی ما کاربرد دارد. در اینجا برای نمایش JPopupMenu ما در مختصات x و y فریم ما استفاده شده است.
• سینتکس یا نحوه نوشتن متد show بصورت زیر است:
public void show( Component origin, int x, int y ) |
1. بجای پارامتر Component origin یک شی از اجزای گرافیکی که قراره منو JPopupMenu با کلیک کردن روی آن نمایش داده شود، قرار میگیرد.
2. x و y نیز موقعیت نمایش منو JPopupMenu را در اجزای گرافیکی مشخص میکند.
popupmenu.show(f, e.getX(), e.getY()); |
• در اینجا شی f که از نوع کلاس JFrame است را به عنوان اجزای گرافیکی که قراره منو ما در آن نمایش داده شود به عنوان پارامتر اول متد show قرار داده ایم.
e.getX(), e.getY() |
• e از نوع کلاس MouseEvent است، یعنی رویدادهایی که از طرف موس رخ میدهد در شی e ذخیره میشود.
• حال قصد داریم مختصات نقطه ای از اجزای گرافیکی که روی آن نقطه با موس کلیک شده است را دریافت کنیم، برای این کار از طریق شی e متدهای getX و getY را صدا میزنیم.
• متد getX مقدار x مکان کلیک شده را میدهد.
• متد getY مقدار y مکان کلیک شده را میدهد.
1.f.add(popupmenu); 2.f.setSize(300, 300); 3.f.setLayout(null); 4.f.setVisible(true); |
1. افزودن شی از نوع کلاس JPopupMenu به فریم.
2. تعیین اندازه فریم
3. چون از طرح بندی خاصی استفاده نکردیم مقدار پارامتر این متد را null قرار دادیم.
4. برای نمایش فریم و تمام اجزای گرافیکی این متد را صدا زده و پارامتر آن را true قرار میدهیم
مثال:
package javalike ; import javax.swing.*; import java.awt.event.*; class PopupMenuExample { PopupMenuExample() { final JFrame f = new JFrame("PopupMenu Example"); final JLabel label = new JLabel(); label.setHorizontalAlignment(JLabel.CENTER); label.setSize(400, 100); final JPopupMenu popupmenu = new JPopupMenu("Edit"); JMenuItem cut = new JMenuItem("Cut"); JMenuItem copy = new JMenuItem("Copy"); JMenuItem paste = new JMenuItem("Paste"); popupmenu.add(cut); popupmenu.add(copy); popupmenu.add(paste); f.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { popupmenu.show(f, e.getX(), e.getY()); } }); cut.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { label.setText("cut MenuItem clicked."); } }); copy.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { label.setText("copy MenuItem clicked."); } }); paste.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { label.setText("paste MenuItem clicked."); } }); f.add(label); f.add(popupmenu); f.setSize(400, 400); f.setLayout(null); f.setVisible(true); } public static void main(String args[]) { new PopupMenuExample(); } } |
خروجی: بعد از اجرای برنامه و کلیک کردن روی فریم خروجی بصورت تصویر(4) خواهد بود:
• حال گزینه copy را از میان آیتم های PopupMenu انتخاب میکنیم، خروجی بصورت تصویر(5) خواهد بود:
• همان طور که در تصویر مشاهده میکنید با انتخاب گزینه copy از لیست منو ظاهر شده، پیامی در لیبل موجود در بالای فریم برنامه نمایش داده شده است.
توضیحات:
import java.awt.event.*; |
• برای استفاده تمام رویدادهای موس و صفحه کلید و.... از این پکیج در برنامه خود استفاده میکنیم.
label.setHorizontalAlignment(JLabel.CENTER); |
• متد setHorizontalAlignment برای تنظیم حالت افقی label ما کاربرد دارد. و پارامتر JLabel.CENTER میگه لیبل ما را وسط یا مرکز حالت افقی در فریم قرار بده.
cut.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { label.setText("cut MenuItem clicked."); } }); |
• اگر جلسات قبل رو مطالعه کرده باشید باید با متد addActionListener آشنا باشید، این متد برای اضاف کردن یک ActionListener به اجزای گرافیکی ما نظیر دکمه ها، منوها،آیتم ها و...استفاده میشود.
• در اینجا قصد داریم یک ActionListener را به شی cut که از نوع کلاس JMenuItem است اضاف کنیم. که با انتخاب این آیتم عمل خاصی اجرا شود.
public void actionPerformed(ActionEvent e) { label.setText("cut MenuItem clicked."); } |
• متد actionPerformed رویدادهای مربوط به انتخاب یا کلیک کردن روی اجزای گرافیکی را دریافت میکند.مثل فشردن دکمه button، گزینه ای در منو ها و...
• وقتی رویدادی رخ دهد متد actionPerformed صدا زده میشود و دستورات درون بدنه ان اجرا میشود.
label.setText("cut MenuItem clicked."); |
• اگر متد actionPerformed صدا زده شود دستور فوق اجرا میشود.
• این دستور یک متن را درون label قرار میدهد.
سایر موارد در این جلسه و جلسات قبل توضیح داده ایم.
پیروز و موفق باشید
این جلسه آموزشی را میتوانید بصورت کتاب الکترونیکی (PDF شده) در لینک زیر دریافت کنید.
این جلسه آموزشی را بصورت کامل و مرتب شده در لینک زیر دانلود کنید:(در صورت خرابی لینک گزارش دهید)
لینک دانلود
نشر این مطلب با ذکر منبع (لینک سایت) بلامانع است.
برای با خبر شدن از جدیدترین مطالب آموزشی جاوا عضو کانال تلگرام ما شوید.
بستن *نام و نام خانوادگی * پست الکترونیک * متن پیام |
دوره های آموزشی برنامه نویسی
انجام پروژه های برنامه نویسی
تدریس خصوصی برنامه نویسی
بیش از 7 سال از فعالیت جاواپرو میگذرد
جاواپرو دارای مجوز نشر دیجیتال از وزارت فرهنگ و ارشاد اسلامی است
جهت ارتباط مستقیم با جاواپرو در واتساپ و تلگرام :
09301904690
بستن دیگر باز نشو! |