ایجاد JPopupMenu در جاوا

JPopupMenu ،منویی است که در برنامه های کاربردی، فراوان مورد استفاده قرار می گیرد. و در هنگام استفاده از یک برنامه کاربردی ممکن است صد ها بار از آن استفاده شود.
در این مقاله قصد دارم ساخت یک JPopupMenu در جاوا را به صورت قدم به قدم انجام دهم.

می خواهیم یک JList ایجاد کنیم که که دارای یک منوی راست کلیک یا همان JPopupMenu باشد.این JPopupMenu دارای ۲ آیتم است که یکی برای اضافه کردن یک سطر به JList و دیگری برای حذف کردن یک سطر از JList .

ابتدا بستر کار یعنی JFrame را آماده می کنیم.
برای این کار من یک class با نام LearnPopupMenu ایجاد می کنم که از کلاس JFrame ارث بری می کند.
در سازنده ی این کلاس تنظیمات مربوط به ایجاد و اندازه و … JFrame را انجام می دهم.

frame

ن یک شی از کلاس Vector ایجاد کرده ام که مقادیر سطرهای JList را در خود حفظ میکند.
ما هنگام حذف/اضافه کردن سطری از/به JList ، ابتدا آن مقدار را از Vector حذف میکنیم سپس کل Vector را جایگزین مقادیر قبلی JList میکنیم.

اکنون وقت آن است که JList را به JFrame اضافه کنیم.
برای این کار در سازنده ی کلاسمان این گونه عمل میکنیم.

pub

اکنون یک فرم داریم که یک JList درون آن قرار دارد. من برای این فرم layout قرار ندادم ، تا JList تمام صفحه را به خود اختصاص دهد.
حال به بخش اصلی این آموزش ، یعنی اضافه کردن PopupMenu به JList می رسیم.
برای این کار ، ابتدا یک شی از کلاس JPopupMenu ایجاد می کنم.
به این صورت:

hh

البته متغییر این شی را در ابتدای تعریف کلاس به صورت عمومی تعریف کرده ام.به شکل زیر:

nn

این شی بدنه ی اصلی JPopupMenu را تشکیل می دهد. حال همانطور که در ابتدا گفتم ،۲ آیتمی که برای خذف و اضافه کردن سطر به JList بود را اضافه کنیم.
برای این کار آرایه ای از کلاس JMenuItem ایجاد می کنم.این آرایه شامل دو خانه است.

ll

در اینجا نیز متغییر این شی را در ابتدای تعریف کلاس به صورت عمومی تعریف کرده ام.
ii

الآن ما دو آیتم در JPopupMenu داریم که هنوز قابل نمایش نیستند. برای اینکه آماده ی نمایش شوند، باید دو شی از کلاس JPopupMenu ایجاد کنیم و آنها را به هر کدام از آیتم ها انتصاب دهیم.
ابتدا شی مربوط به آیتم اضافه کردن سطر به JList را ایجاد میکنیم و آن را به خانه ی اولیه ی آرایه ی item انتصاب می دهیم.

oo

حال کاری را که قرار است انجام شود (اضافه کردن یک سطر به JList) را برایش تعریف می کنیم. برای این کار یک ActionListener به این آیتم اضافه می کنیم.

bb

در متد actionPerformed کد های اضافه کردن سطر جدید به JList را نوشتیم. یعنی اضافه کردن یک آیتم جدید به Vector و جایگزین کردن این Vector با مقادیر قبلی JList.
اگر بخواهیم یک کلید میانبر هم برای این عمل قرار دهیم به شکل زیر عمل می کنیم.

item

حال باید این آیتم را به menu اضافه کنیم.

aa

برای آیتم حذف هم مانند آیتم اضافه کردن، ابتدا یک شی از JMenuItem ساخته ، و به خانه ی دوم آرایه ی item انتصاب می دهیم.

gg

اکنون با اضافه کردن یک addActionListener به این آیتم، کدهای مربوط به حذف کردن سطر انتخاب شده در JList را در متد actionPerformed می نویسیم.

nnk

در این کد ابتدا با دستور list.getSelectedIndex() شماره ی سطری را که هم اکنون انتخاب شده است را به دست آوردیم.
سپس در آیتمی با این شماره را از Vector حذف کردیم.
سپس Vector تغییر یافته را جایگزین اطلاعات قبلی JList کردیم.

برای اضافه کردن کلید ترکیبی میانبر هم به صورت زیر عمل می کنیم.

zz

اکنون باید آیتم دومرا هم به menu اضافه کنیم

az

اکنون JPopupMenu ما آماده است، و فقط باید در مواقع لزوم (هنگام کلیک راست کردن) آن را نمایش دهیم.

برای اینکار باید با استفاده از کلاس MouseAdapter یک MouseListener به JList اضافه کنیم. و متد mouseClicked را پیاده سازی کنیم. در متد mouseClicked باید کد های مربوط به نمایش JPopupMenu را می نویسم.

jj

کار ما تمام است . فقط برای اینکه برنامه را اجرا کنیم، باید کتد main را هم به کلاس LearnPopupMenu اضافه کنیم.به این شکل:

ppo

خب اگر تا اینجا تمام کارها را به درستی انجام داده باشید باید برنامه اجرا شود، و با راست کلیک کردن روی برنامه ، بدون مشکل JPopupMenu را ببینید و هر کدام از آیتم های آن کار خود را به درستی انجام دهند.

برای راست به چپ کردن آیتم ها در JPopupMenu به شکل زیر عمل میکنیم:

iio

تصویر نهایی از محیط برنامه

asw