我创建了一个textarea,我希望捕获用户的paste
操作。当用户**粘贴**时,我想检查剪贴板的内容并对粘贴内容做一些事情。
我在onPaste
课程中找不到任何TextArea
类似的方法,我该怎么做?
我可以使用keyPressed
方法捕获onKeyPressed
个事件,并检查用户是否按下 control + v 或命令 + v ,但我认为这不是最佳解决方案。
答案 0 :(得分:4)
TextArea
从paste()
继承TextInputControl
方法,如果从系统剪贴板粘贴内容,则会调用该方法。粘贴文本时没有触发特定事件,但您可以覆盖此方法并定义自己的行为。标准行为是使用粘贴的内容调用replaceSelection(...)
,因此一种方法是从系统剪贴板检索内容,根据需要进行修改,并将修改后的版本传递给replaceSelection(...)
方法。 / p>
粘贴在剪贴板上的大写版本的简单示例:
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);
}
}