Question

Cela me laisse vraiment perplexe.

J'ai un JTextComponent pour lequel j'ai ajouté une coupe clic droit \ copier \ coller menu à l'aide d'un JPopupMenu et DefaultEditorKit.Cut\Copy\PasteAction().

JMenuItem cutItem = new JMenuItem(new DefaultEditorKit.CutAction());
JMenuItem copyItem = new JMenuItem(new DefaultEditorKit.CopyAction());
JMenuItem pasteItem = new JMenuItem(new DefaultEditorKit.PasteAction());

Pour chaque action que j'ai ajouté un écouteur d'action qui saisit le texte du JTextComponent, que je veux utiliser dans une fonction.

final ActionListener textFieldListener = new ActionListener() {
@Override public void actionPerformed(ActionEvent e){someGlobalFunction(textComponent.getText());
}
}; 

...

cutItem.addActionListener(textFieldListener );
copyItem.addActionListener(textFieldListener );
pasteItem.addActionListener(textFieldListener );

Cependant, le seul texte que je peux mettre la main sur est la chaîne qui était avant J'ai coupé \ coller dans le composant, et non après.

Y at-il une solution évidente pour cela?

Était-ce utile?

La solution

Enveloppez le code dans la méthode actionPerformed () dans un SwingUtilities.invokeLater (...), Cela va ajouter le code à la fin puis de l'EDT, il devrait exécuter après la couper / copier / coller les commandes.

Autres conseils

Il est parce que vous ne l'écoutez pas votre champ de texte, vous écoutez le menu: -)

Mettez un écouteur sur votre champ de texte, ou sur le document de votre champ de texte, ou peut-être un FilterDocument, ou même votre propre document.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top