Вставить пункт меню, ничего не делая при подключении к JTextField

1

У меня есть JTextField, вставка автоматически работает с использованием Cntl-V из-за встроенной поддержки в Swing. Но мне также нужно всплывающее меню, чтобы помочь пользователям, не знакомым с клавишами быстрого доступа. Следующий код

import javax.swing.*;
import java.awt.*;

public class TestPopup
{
    public static void main(final String[] args)
    {
        JFrame frame = new JFrame();
        JTextField widget      = new JTextField(50);
        final JPopupMenu popup = new JPopupMenu();
        popup.add(widget.getActionMap().get("paste"));
        widget.add(popup);
        widget.setComponentPopupMenu(popup);
        frame.add(widget);
        frame.pack();
        frame.setVisible(true);
    }
}

отображает параметр вставки, но при выборе ничего не делает. Также примечание отображается как "вставить", а не "Вставить",

Что я делаю не так?

* Решение *

Nevermind, получил его работу, используя DefaultEditorKit.pasteAction вместо "paste" делает работу пасты (непонятно мне, что действие "paste" действительно делает, поскольку оно существует)

import javax.swing.*;
import javax.swing.text.DefaultEditorKit;
import java.awt.*;

public class TestPopup
{
    public static void main(final String[] args)
    {
        JFrame frame = new JFrame();
        JTextField widget      = new JTextField(50);
        final JPopupMenu popup = new JPopupMenu();
        popup.add(widget.getActionMap().get(DefaultEditorKit.pasteAction));
        widget.add(popup);
        widget.setComponentPopupMenu(popup);
        frame.add(widget);
        frame.pack();
        frame.setVisible(true);
    }
}

но это не решит проблему имени, для этого я ввел пункт меню

import javax.swing.*;
import javax.swing.text.DefaultEditorKit;
import java.awt.*;

public class TestPopup
{
    public static void main(final String[] args)
    {
        JFrame frame = new JFrame();
        JTextField widget      = new JTextField(50);
        final JPopupMenu popup = new JPopupMenu();
        JMenuItem pasteMenuItem = new JMenuItem(widget.getActionMap().get(DefaultEditorKit.pasteAction));
        pasteMenuItem.setText("Paste");
        popup.add(pasteMenuItem);

        widget.setComponentPopupMenu(popup);
        frame.add(widget);
        frame.pack();
        frame.setVisible(true);
    }
}
  • 0
    @mKorbel я не следую
  • 0
    Чтобы быстрее помочь, опубликуйте MCVE (Минимальный завершенный и проверяемый пример).
Показать ещё 6 комментариев
Теги:
swing
jtextfield
key-bindings
jpopupmenu

1 ответ

1
Лучший ответ

Это может помочь заметить, что DefaultEditorKit.pasteAction - это имя Action, "paste-from-clipboard". Может быть проще установить пункт меню Action напрямую:

JMenuItem pasteMenuItem = new JMenuItem(new DefaultEditorKit.PasteAction());
  • 0
    Ах, хорошо, спасибо за совет

Ещё вопросы

Сообщество Overcoder
Наверх
Меню