• 0

كيف أضيف حدث الضغط بزر الفأرة الأيمن على تطبيق Java؟

على تطبيق لديّ بلغة Java أضفت عنصر JMenu، وأريد تفعل إظهار قائمة عند الضغط بزر الفأرة الأيمن، مع تحديد مكان ضغط الفأرة، كيف ذلك؟

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0

يمكن إضافة القائمة الافتراضية والتي تظهر بعد الضغط على أي عنصر في التطبيق، حيث تخصص الوظيفة التي سينفذها التطبيق عن كل اختيار، ولنقل مثلا لدينا حقل نصي 

JTextArea، ونريد عمل وظائف النسخ والقص والحذف...

سنقوم أولا بعمل القائمة:

import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JSeparator;
import javax.swing.KeyStroke;
import javax.swing.event.UndoableEditEvent;
import javax.swing.event.UndoableEditListener;
import javax.swing.text.JTextComponent;
import javax.swing.undo.UndoManager;

@SuppressWarnings("serial")
public class DefaultContextMenu extends JPopupMenu
{
    private Clipboard clipboard;

    private UndoManager undoManager;

    private JMenuItem undo;
    private JMenuItem redo;
    private JMenuItem cut;
    private JMenuItem copy;
    private JMenuItem paste;
    private JMenuItem delete;
    private JMenuItem selectAll;

    private JTextComponent jTextComponent;

    public DefaultContextMenu()
    {
        undoManager = new UndoManager();
        clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();

        undo = new JMenuItem("Undo");
        undo.setEnabled(false);
        undo.setAccelerator(KeyStroke.getKeyStroke("control Z"));
        undo.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent event)
            {
                undoManager.undo();
            }
        });

        add(undo);

        redo = new JMenuItem("Redo");
        redo.setEnabled(false);
        redo.setAccelerator(KeyStroke.getKeyStroke("control Y"));
        redo.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent event)
            {
                undoManager.redo();
            }
        });

        add(redo);

        add(new JSeparator());

        cut = new JMenuItem("Cut");
        cut.setEnabled(false);
        cut.setAccelerator(KeyStroke.getKeyStroke("control X"));
        cut.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent event)
            {
                jTextComponent.cut();
            }
        });

        add(cut);

        copy = new JMenuItem("Copy");
        copy.setEnabled(false);
        copy.setAccelerator(KeyStroke.getKeyStroke("control C"));
        copy.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent event)
            {
                jTextComponent.copy();
            }
        });

        add(copy);

        paste = new JMenuItem("Paste");
        paste.setEnabled(false);
        paste.setAccelerator(KeyStroke.getKeyStroke("control V"));
        paste.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent event)
            {
                jTextComponent.paste();
            }
        });

        add(paste);

        delete = new JMenuItem("Delete");
        delete.setEnabled(false);
        delete.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0));
        delete.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent event)
            {
                jTextComponent.replaceSelection("");
            }
        });

        add(delete);

        add(new JSeparator());

        selectAll = new JMenuItem("Select All");
        selectAll.setEnabled(false);
        selectAll.setAccelerator(KeyStroke.getKeyStroke("control A"));
        selectAll.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent event)
            {
                jTextComponent.selectAll();
            }
        });

        add(selectAll);
    }
  • قمنا في البداية باستدعاء المكتبات والحزم اللازمة .
  • عرّفنا كلاس DefaultContextMenu والتي ترث من JPopMenu جميع خصائصها.
  • لنقوم بعد ذلك بتغيير الدوال الموجودة سابقاً داخل JPopMenu  حسب حاجتنا لها.

وهذه طريقة استعمال الدوال السبقة على عنصر JTextArea:

JTextArea textArea = new JTextArea();
DefaultContextMenu contextMenu = new DefaultContextMenu();
contextMenu.add(textArea);

JTextArea  يتوفر الآن على قائمة عند ضغطه بزر الفأرة الأيمن، أو ما يطلق عليها بـ Context Menu.

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن