Obtenir une action après le texte est collé dans un JTextComponent (Java)
-
23-10-2019 - |
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?
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.