Java: Как создать пасту MenuItem с ускорителем? - PullRequest
0 голосов
/ 09 ноября 2010

Когда я создаю JMenuBar с действием «Вставить» и назначаю ему ускоритель (Control-V), я пишу действие вставки для JMenuItem.И я использую ускоритель, мой код будет выполнен, и запрограммированное действие Swing Paste будет выполнено, поэтому я думаю, что текст будет вставлен дважды.

Я не проверял его, но выглядит очень логичночто это будет проблемой.

Спасибо

1 Ответ

1 голос
/ 09 ноября 2010

Swing работает с помощью привязок клавиш. Таким образом, вызывается только одно действие в зависимости от того, какая привязка ключа найдена. Таким образом, вы не сможете вставить текст дважды.

У вас может быть другое вызванное Действие в зависимости от того, какой компонент имеет фокус и как было вызвано Действие.

Например, если фокус находится на текстовом компоненте, то я бы предположил, что будет использовано действие вставки по умолчанию.

Если вы щелкнете по пункту меню, то будет выполнено действие, которое вы добавили к пункту меню.

Если вы вызываете Control + V, когда фокус не на текстовом поле, то я предполагаю, что действие, привязанное к пункту меню, будет вызвано, потому что ускорители используют InputMap "в окне фокуса" (или как его там называют).

Если вы используете Действия по умолчанию, предоставляемые EditorKit, у вас не возникнет проблем:

JMenuItem pasteAction = new JMenuItem( new DefaultEditorKit.PasteAction() );
pastAction.setAccelerator(...);
...