将文本复制到剪贴板中,右键单击文本字段并按"粘贴",有没有办法在单击粘贴时收听?或者更确切地说,字段中的输入文本在以这种方式粘贴某些内容后发生了变化。因为这些在这种特殊情况下不起作用:
setOnKeyReleased()
setOnInputMethodTextChanged()
"粘贴"功能在public void paste()
中TextField
的TextInputControl
超类中实现。因此,虽然它不是真正的事件驱动或 MVC 方法,但您可以通过重写此方法对"粘贴"操作(无论是通过鼠标还是键盘快捷键调用,通常为 ctrl-V)做出反应:
TextField tf = new TextField() {
@Override
public void paste() {
super.paste();
System.out.println("text pasted in");
}
}
你可以只听文本属性的变化。具有搜索文本字段的示例:
tf_search.textProperty().addListener((observableValue, oldValue, newValue) -> {
onSearch();
});
另一种方法是使用剪贴板覆盖适当的方法。
TextField tf = new TextField() {
@Override
public void paste() {
Clipboard clipboard = Clipboard.getSystemClipboard();
if (clipboard.hasString()) {
replaceSelection(clipboard.getString());
}
}
};