听取粘贴事件JTextArea

Muh*_*mer 3 java swing paste event-handling jtextarea

我想在用户在JTextArea中粘贴文本时调用函数.将文本粘贴到JTextArea时是否会生成任何事件?我可以使用哪个侦听器来触发此事件的函数?

Mad*_*mer 5

一种可能的解决方案(我希望其中一个更好的解决方案)是替换Action负责实际执行粘贴操作的密钥绑定.

现在,在你这样做之前,默认的粘贴操作并不简单,相反,我会用Action代理替换默认的粘贴,代理可以调用​​原始,但是允许你拦截操作,但不必重新实现功能你自己,例如......

public class ProxyAction extends AbstractAction {

    private Action action;

    public ProxyAction(Action action) {
        this.action = action;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        action.actionPerformed(e);
        System.out.println("Paste Occured...");
    }

}
Run Code Online (Sandbox Code Playgroud)

然后你只需要查找默认值Action并替换它......

JTextArea ta = new JTextArea(10, 10);
Action action = ta.getActionMap().get("paste-from-clipboard");
ta.getActionMap().put("paste-from-clipboard", new ProxyAction(action));
Run Code Online (Sandbox Code Playgroud)

这里的问题是,这不会告诉您操作是否失败或成功或实际粘贴的是什么.为此,您可以使用a DocumentListener,在调用默认值之前注册Action,可以记录对文档的更改.显然,您需要在默认操作后取消注册;)...

现在,同样地,你可以覆盖它的paste方法JTextArea,这相当于大约相同的东西,但是,第一个选项将更加便携......

作为一个想法......

看看如何使用操作如何使用按键绑定更多细节