这真让我困惑。
我有一个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 );
但是,我能抓住的唯一文字是之前的字符串<切换\粘贴到组件中,而不是之后。
有没有明显的解决方案?
答案 0 :(得分:1)
将代码包装在SwingUtilities.invokeLater(...)中的actionPerformed()方法中,这会将代码添加到EDT的末尾,以便它应该在剪切/复制/粘贴命令之后执行。
答案 1 :(得分:0)
这是因为你不听你的文字字段,你听菜单: - )
将监听器放在文本字段上,或放在文本字段的文档上,或者放在FilterDocument上,甚至放在自己的文档中。