اذهب إلى المحتوى

السؤال

Recommended Posts

  • 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.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...