我正在尝试制作一个可编辑的 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/