2010-11-09 24 views
0

Lorsque je crée un JMenuBar avec une action Coller dans lui et lui assigne un accélérateur (Control - V) et j'écris l'action de collage pour le JMenuItem. ET j'utilise l'accélérateur, mon code sera exécuté et l'action Coller préprogrammée par Swing sera exécutée, donc le texte sera collé deux fois, je pense.Java: Comment créer un paste MenuItem avec accélérateur?

Je ne l'ai pas testé mais, il semble très logique que ce serait le problème.

Merci

+0

vous devez peut-être supprimer l'action Coller de votre carte d'action des composants? –

Répondre

1

swing fonctionne en utilisant les raccourcis clavier. Donc, une seule action est invoquée en fonction de la clé trouvée. Donc vous ne blessez pas le texte collé deux fois.

Une action différente peut être appelée en fonction du composant qui a le focus et de la manière dont l'action a été appelée. Par exemple, si l'accent est mis sur le composant texte, je suppose que l'action Coller par défaut sera utilisée.

Si vous cliquez sur l'élément de menu, l'action que vous avez ajoutée à l'élément de menu est invoquée. Si vous appelez Ctrl + V lorsque le focus n'est pas sur un champ de texte, alors l'action liée à l'élément de menu sera invoquée car les accélérateurs utilisent la fenêtre "in focus" (ou quel que soit son nom) InputMap.

Si vous utilisez les actions par défaut fournies par le EditorKit vous n'aurez pas un problème:

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