Режим замены в JavaFx TextArea: как включить

Моему приложению нужна область редактирования текста, где требуется режим ввода текста "overtype". Это своего рода поведение, которое запускается в некоторых приложениях для ввода текста при переключении клавиши вставки на клавиатуре. В режиме ввода текста с замещением символы, введенные пользователем, заменяют существующие символы, если они есть, а не сдвигают их влево.

Как это можно включить в JavaFX TextArea?


person Ajoy    schedule 09.11.2020    source источник
comment
Вы можете установить TextFormatter в текстовой области с фильтром, который модифицирует изменение. См. openjfx.io/javadoc/14/javafx.controls. /javafx/сцена/управление/   -  person James_D    schedule 09.11.2020


Ответы (1)


Вот пример, основанный на комментарии James_D:

public class Main extends Application {

    UnaryOperator<TextFormatter.Change> changeFilter = c -> {
        if (c.isAdded()) {
            int len = c.getText().length();
            c.setRange(c.getRangeStart(), Math.min(c.getControlText().length(), c.getRangeStart()+len));
        }
        return c;
    };

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

    @Override
    public void start(Stage stage) throws Exception {
        TextArea textArea = new TextArea("Type over this text.");
        textArea.setTextFormatter(new TextFormatter<>(changeFilter));
        textArea.setFont(Font.font("Monospaced"));
        Scene scene = new Scene(textArea);
        stage.setTitle("TypeOver");
        stage.setScene(scene);
        stage.setMinWidth(400);
        stage.show();
    }
}
person swpalmer    schedule 09.11.2020