1

这真的让我很困惑。

我有一个JTextComponent使用 JPopupMenu 和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());

对于每个动作,我都添加了一个动作侦听器,它抓取 JTextComponent 的文本,我想在函数中使用它。

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

...

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

但是,我可以保留的唯一文本是我剪切\粘贴到组件之前而不是之后的字符串。

有什么明显的解决方案吗?

4

2 回答 2

1

Wrap the code in the actionPerformed() method in a SwingUtilities.invokeLater(...), This will add the code to then end of the EDT so it should execute after the cut/copy/paste commands.

于 2010-06-02T19:36:52.623 回答
0

这是因为您不听文本字段,而是听菜单:-)

将侦听器放在您的文本字段上,或者在您的文本字段的文档上,或者可能是 FilterDocument,甚至是您自己的文档上。

于 2010-06-02T19:32:50.463 回答