Muh*_*mer 3 java swing paste event-handling jtextarea
我想在用户在JTextArea中粘贴文本时调用函数.将文本粘贴到JTextArea时是否会生成任何事件?我可以使用哪个侦听器来触发此事件的函数?
一种可能的解决方案(我希望其中一个更好的解决方案)是替换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,这相当于大约相同的东西,但是,第一个选项将更加便携......
作为一个想法......
| 归档时间: |
|
| 查看次数: |
3352 次 |
| 最近记录: |