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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top