我创建了一个textarea,我想捕捉用户的
paste
操作。当用户**粘贴**时,我想检查剪贴板的内容并对粘贴的内容做一些事情。
我在
onPaste
类中找不到任何类似TextArea
的方法,我该怎么做?
我可能会用
keyPressed
方法捕获 onKeyPressed
事件,并检查用户是否按下了 control + v,或 command + v,但我认为这不是最好的解决方案.
TextArea
从 paste()
继承了一个 TextInputControl
方法,如果从系统剪贴板粘贴内容时调用该方法。粘贴文本时不会触发特定事件,但您可以覆盖此方法并定义您自己的行为。标准行为是使用粘贴的内容调用 replaceSelection(...)
,因此一种方法是从系统剪贴板中检索内容,根据需要修改它,并将修改后的版本传递给 replaceSelection(...)
方法。
粘贴剪贴板上任何内容的大写版本的简单示例:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TextArea;
import javafx.scene.input.Clipboard;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
BorderPane root = new BorderPane();
TextArea textArea = new TextArea() {
@Override
public void paste() {
Clipboard clipboard = Clipboard.getSystemClipboard();
if (clipboard.hasString()) {
replaceSelection(clipboard.getString().toUpperCase());
}
}
};
root.setCenter(textArea);
Scene scene = new Scene(root,400,400);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}