Obtener una acción después del texto se pegan en un JTextComponent (Java)
-
23-10-2019 - |
Pregunta
Esto realmente me desconcierta.
tengo un JTextComponent
para el cual he agregado un menú de corte copiar pegar con el clic derecho con un jpopupmenu y 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());
Para cada acción, agregué un oyente de acción que toma el texto de JTextComponent, que quiero usar en una función.
final ActionListener textFieldListener = new ActionListener() {
@Override public void actionPerformed(ActionEvent e){someGlobalFunction(textComponent.getText());
}
};
...
cutItem.addActionListener(textFieldListener );
copyItem.addActionListener(textFieldListener );
pasteItem.addActionListener(textFieldListener );
Sin embargo, el único texto que puedo aferrar es la cadena que era antes de Corto Pegar en el componente, no después.
¿Hay alguna solución obvia para esto?
Solución
Envuelva el código en el método ActionPerformed () en A swingUtility.invokelater (...), esto agregará el código al final del EDT para que debe ejecutarse después de los comandos de corte/copiar/pegar.
Otros consejos
Es porque no escuchas tu campo de texto, escuchas el menú :-)
Coloque un oyente en su campo de texto, o en el documento de su campo de texto, o tal vez un FilterDocument, o incluso su propio documento.