У меня есть 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);
}
}
Это может помочь заметить, что DefaultEditorKit.pasteAction
- это имя Action
, "paste-from-clipboard"
. Может быть проще установить пункт меню Action
напрямую:
JMenuItem pasteMenuItem = new JMenuItem(new DefaultEditorKit.PasteAction());