JavaFX TextArea删除快捷键Ctrl + Z

时间:2016-06-01 17:37:43

标签: 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()必须仍然可行)我只是想删除KeyPress事件默认情况下是创建的,我该怎么做?

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

2 个答案:

答案 0 :(得分:4)

在文本区域添加一个事件过滤器,如果它与快捷方式匹配,则使用该事件:

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);
    }
}

答案 1 :(得分:2)

您有以下几种选择:

常见的是他们正在使用while($row = mysqli_fetch_array($result)){ echo "<tr> <td>".$row["id"]."</td> <td>".$row["name"]."</td> <td>".$row["ort"]."</td> <td>".$row["strasse"]."</td> <td>".$row["projektleiter"]."</td> <td><a href='edit.php?id=".$row['id']."' alt='edit'>Bearbeiten</a></td> </tr>"; }?> 类的comsume()方法。

1)使用KeyCodeCombination

Event

2)使用isShortcutDown()KeyEvent方法:

TextArea ta = new TextArea();
final KeyCombination keyCombCtrZ = new KeyCodeCombination(KeyCode.Z, KeyCombination.SHORTCUT_DOWN;
final KeyCombination keyCombCtrY = new KeyCodeCombination(KeyCode.Y, KeyCombination.SHORTCUT_DOWN);
ta.setOnKeyPressed(new EventHandler<KeyEvent>() {

    @Override
    public void handle(KeyEvent event) {
        if (keyCombCtrZ.match(event) || keyCombCtrY.match(event) ) { 
            event.consume();
        }

    }
});