将文本粘贴到JTextComponent(Java)后获取操作

时间:2010-06-02 18:57:22

标签: java swing actionlistener jtextcomponent

这真让我困惑。

我有一个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 );

但是,我能抓住的唯一文字是之前的字符串<切换\粘贴到组件中,而不是之后。

有没有明显的解决方案?

2 个答案:

答案 0 :(得分:1)

将代码包装在SwingUtilities.invokeLater(...)中的actionPerformed()方法中,这会将代码添加到EDT的末尾,以便它应该在剪切/复制/粘贴命令之后执行。

答案 1 :(得分:0)

这是因为你不听你的文字字段,你听菜单: - )

将监听器放在文本字段上,或放在文本字段的文档上,或者放在FilterDocument上,甚至放在自己的文档中。