textarea的`onPaste`在哪里?

时间:2014-05-09 04:56:24

标签: events javafx paste

我创建了一个textarea,我希望捕获用户的paste操作。当用户**粘贴**时,我想检查剪贴板的内容并对粘贴内容做一些事情。

我在onPaste课程中找不到任何TextArea类似的方法,我该怎么做?

我可以使用keyPressed方法捕获onKeyPressed个事件,并检查用户是否按下 control + v 命令 + v ,但我认为这不是最佳解决方案。

1 个答案:

答案 0 :(得分:4)

TextAreapaste()继承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);
    }
}