Per un'azione dopo il testo viene incollato in un JTextComponent (Java)
-
23-10-2019 - |
Domanda
Questo mi lascia perplesso veramente.
Ho un JTextComponent
per cui ho aggiunto un taglio destro del mouse \ Menu copia utilizzando un JPopupMenu e DefaultEditorKit.Cut\Copy\PasteAction()
\ incollare.
JMenuItem cutItem = new JMenuItem(new DefaultEditorKit.CutAction());
JMenuItem copyItem = new JMenuItem(new DefaultEditorKit.CopyAction());
JMenuItem pasteItem = new JMenuItem(new DefaultEditorKit.PasteAction());
Per ogni azione ho aggiunto un listener di azione che prende il testo del JTextComponent, che voglio usare in una funzione.
final ActionListener textFieldListener = new ActionListener() {
@Override public void actionPerformed(ActionEvent e){someGlobalFunction(textComponent.getText());
}
};
...
cutItem.addActionListener(textFieldListener );
copyItem.addActionListener(textFieldListener );
pasteItem.addActionListener(textFieldListener );
Tuttavia, l'unico testo che posso entrare in possesso su è la stringa che è stato prima ho tagliato \ incollare nel componente, non dopo.
C'è qualche soluzione ovvia per questo?
Soluzione
Avvolgere il codice nella actionPerformed () metodo in una SwingUtilities.invokeLater (...), Questo aggiungerà il codice per poi fine della EDT quindi dovrebbe eseguire dopo il taglia / copia / incolla dei comandi.
Altri suggerimenti
E 'perché non si ascolta il tuo campo di testo, si ascolta il menu: -)
Mettere un ascoltatore sul campo di testo, o sul documento del campo di testo, o forse un FilterDocument, o anche il proprio documento.