JavaFX TextField cancelEdit未按预期工作



我有一个TextField,我希望字段的内容恢复到以前的值,当我按Esc这是大多数系统上的预期行为(我不知道为什么JavaFX默认不这样做)。

为此,我试图使用TextField.cancelEdit(),但似乎这是什么都不做。

这是一个SSCCE

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyCode;
import javafx.stage.Stage;
public class UiTest2Controller extends Application {
    public static void main(String[] args) {
        launch(args);
    }
    @Override
    public void start(Stage aPrimaryStage) throws Exception {
        final TextField field = new TextField();
        field.setOnAction(aEvent -> {
            System.out.println("Action");
        });
        field.setOnKeyPressed(aEvent -> {
            if (aEvent.getCode() == KeyCode.ESCAPE) {
                System.out.println("Escape");
                field.cancelEdit();
                field.getParent().requestFocus();
            }
        });
        field.setPromptText("Hello World...");
        aPrimaryStage.setScene(new Scene(new Group(field)));
        aPrimaryStage.show();
    }
}

复制步骤:

  1. 在文本框
  2. 中输入一些内容
  3. Esc

预期行为:字段返回到前一个值(第一次为空)并且焦点丢失。

实际行为:字段保留其当时的值,焦点丢失

我不确定具体情况,但如果TextFieldTextFormatter分配,它似乎可以按预期工作:

field.setTextFormatter(new TextFormatter<>(TextFormatter.IDENTITY_STRING_CONVERTER));

相关内容

  • 没有找到相关文章

最新更新