textarea 的 `onPaste` 在哪里?

问题描述 投票:0回答:1

我创建了一个textarea,我想捕捉用户的

paste
操作。当用户**粘贴**时,我想检查剪贴板的内容并对粘贴的内容做一些事情。

我在

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

我可能会用

keyPressed
方法捕获
onKeyPressed
事件,并检查用户是否按下了 control + v,或 command + v,但我认为这不是最好的解决方案.

events javafx paste
1个回答
4
投票

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);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.