JavaFXt̶e̶x̶t̶a̶r̶e̶a̶删除了特定字符的CodeArea事件

时间:2017-04-23 03:53:49

标签: javafx textarea undo

像“onTextDeleted(String deletedText)”或某些属性,textProperty并没有多大帮助。我可以做一些事情,比如在删除某些内容之前保存caretPosition(退格,删除或每当selectText被覆盖),并在textProperty中使用currentCaretPosition并从旧值中执行子字符串(currentCaretPosition,savedCaretPositionBeforeDelete).contains(“;”)或者反之,如果文本选择是向后完成的。

我的意思是,这似乎不太实际,这就是我目前正在做的事情。我一直在研究getUndoManager(),但是没有访问undoList()。顺便说一句,我正在使用Tomas Mikula的RichtextFX。

1 个答案:

答案 0 :(得分:0)

TextFormatter可以处理和控制TextInputControl的更改。

这是一种扩展JavaFX的TextInputControl的组件方法。

textArea.setTextFormatter(new TextFormatter<String>(change -> {
    if (change.isDeleted() || change.isReplaced()) {
        System.out.println("Text removal: " + change.getControlText().substring(change.getRangeStart(), change.getRangeEnd()));
        System.out.println("Text additional: " + change.getText());
        System.out.println("CaretPosition current: " + change.getControlCaretPosition());
        System.out.println("CaretPosition to: " + change.getCaretPosition());

        // change.setCaretPosition(position);
    }
    return change;
}));

有关详细信息,请参阅TextFormatter.Change: API Document