JavaFX TextArea 删除快捷方式 Ctrl+Z 的默认撤消操作

标签 java javafx

我正在尝试制作一个可编辑的 Java FX TextArea,它无法使用快捷键 Ctrl+Z 撤消最后一步。默认情况下,当您创建可编辑的 JavaFX TextArea 时,JavaFX 为快捷键 Ctrl+Z/Ctrl+Y 提供默认的撤消/重做功能,同时该 TextArea 处于焦点状态(以及复制、粘贴等)。 ).我想为快捷方式 Ctrl+Z 和 Ctrl+Y 禁用这些默认操作,以便能够创建我自己的撤消/重做逻辑而不是 JavaFX 提供的默认逻辑。另外:我不想完全禁用 JFX 的撤消重做逻辑,因为我之后会使用它,(textarea.undo()textarea.redo()必须仍然是可能的)我只是想删除默认创建的按键事件,我该怎么做?

代码:我使用 FXML 在 BorderPane 中创建了一个 TextArea,并将一个 Controller 附加到 FXML,因此可以通过代码访问 TextArea,不使用 css 文件。

最佳答案

向文本区域添加事件过滤器,并在匹配快捷方式时消费该事件:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TextArea;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.stage.Stage;

public class TextAreaNoUndo extends Application {

    @Override
    public void start(Stage primaryStage) {
        TextArea area = new TextArea();
        area.addEventFilter(KeyEvent.ANY, e -> {
            if (e.getCode() == KeyCode.Z && e.isShortcutDown()) {
                e.consume();
            }
        });

        primaryStage.setScene(new Scene(area));
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

关于JavaFX TextArea 删除快捷方式 Ctrl+Z 的默认撤消操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37575363/

相关文章:

JavaFX 检索 tableView 中拖动列的索引

java - 如何将程序链接到 Controller 类

java - 加载fxml时"javafx.fxml.LoadException"

java - 组织.apache.hadoop.mapreduce.counters.LimitExceededException : Too many counters: 121 max=120

java - BigInteger 到十六进制冒号表示法

java - 在@BeforeAll 注释方法中使用 JUnit 5 运行的测试中,Mockito 不会初始化模拟

java - 如何从多个嵌套 FXML 获取数据并调用其 Controller 上的方法

javafx - 表格 View 可见行

java - 我可以使用哪些非 sun java 来运行 Clojure?

java - 将图像文件绘制到 SurfaceView 返回空白