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

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

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

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

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

public class LearnPopupMenu extends JFrame{

    public LearnPopupMenu(){
        super();
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(200, 400);
        setVisible(true);
    }
    public static void main(String args[]){
        new LearnPopupMenu();
    }
}

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

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

public class LearnPopupMenu2 extends JFrame {

    private JList list;
    private Vector data ;

    public LearnPopupMenu2() {
        super();
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(200, 400);
        data=new Vector();
        list = new JList(data);
        list.setSelectedIndex(0);
        list.setFixedCellWidth(180);
        list.setFixedCellHeight(30);
        add(new JScrollPane(list));

        setVisible(true);
    }

    public static void main(String args[]) {
        new LearnPopupMenu1();
    }
}

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

menu = new JPopupMenu();

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

private JPopupMenu menu = null;

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

private JPopupMenu menu = null;

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

private JMenuItem item;

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

item[0] = new JMenuItem("مورد جدید");

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

      item[0].addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                data.add("ListRow " + i++);
                list.setListData(data);
            }
        });

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

item[0].setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, InputEvent.CTRL_MASK));

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

menu.add(item[1]);

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

item[1] = new JMenuItem("حذف");

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

      item[1] = new JMenuItem("حذف");
        item[1].setAccelerator(KeyStroke.getKeyStroke(
                  KeyEvent.VK_E, InputEvent.CTRL_MASK));
        item[1].addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                data.remove(list.getSelectedIndex());
                list.setListData(data);
            }
        });

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

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

item[1].setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E, InputEvent.CTRL_MASK));

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

menu.add(item[2]);

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

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

      list.addMouseListener(new MouseAdapter() {

            @Override
            public void mouseClicked(MouseEvent e) {
                if (e.getButton() == 3) {
                    menu.show(e.getComponent(), e.getX(), e.getY());
                }
            }
        });

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

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

item[0].setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
item[1].setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);

 

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

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

مدیریت استثنا های برنامه را به خودتان می سپارم.

موفق و سربلند باشید.

امید فرجی

omidfaraji2099@gmail.com

 

 

امید فرجی

سلام، امید فرجی هستم از همدان. از سال 1398 در حوزه برنامه نویسی فعالیت دارم و در این مدت پروژه های تجاری مختلفی انجام دادم. همچنین از سال 1391 سایت آموزش تخصصی جاوا را راه اندازی کردم و در خدمت شما هستم. امیدوارم مفید بوده باشم.

شما ممکن است این را هم بپسندید

۵ پاسخ‌ها

  1. جاواکار گفت:

    سلام
    عالی بود
    یه غلط تایپی دیدم، سه خط مونده به آخر “مدیریت استثناها” .
    یهپیشنهادم دارم، اونم اینکه اگه بشه تصویر نهایی این آموزش رو هم قرار بدید.
    مثلا در این آموزش، تصویر نهایی منوی پاپ آپ اجرا شده رو هم در پایان قرار بدید، زیباتر میشه.

    خدا قوت.

  2. جاواکار گفت:

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

    ممنونم

    • سلام. ممنون.
      بعد از مبحث Swing حتما یکی دو جلسه آموزشی رو به دیتابیس اختصاص میدم. و روش استفاده از دیتابیس رو در جاوا توضیح میدم.
      البته دوستان باید قبلا آشنایی با زبان SQL داشته باشن. تا بتونن از آموزش ها بهتر استفاده کنن.

  3. لیلا گفت:

    سلام خسته نباشین من دارم یه برنامه ثبت نام واسه یه آموزشگاه مینویسم مشکلی که دارم اینکه چطور میتونم برنامه خودمو به پرینتر متصل کنم؟؟؟

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *