JavaFX TextField cancelEdit无法按预期工作

时间:2016-06-27 16:44:12

标签: java user-interface javafx

我有一个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. Esc
  3. 预期行为:该字段返回上一个值(第一次为空)并且焦点丢失。

    实际行为:当时fiels保留其值并且焦点丢失。

1 个答案:

答案 0 :(得分:4)

我不确定具体细节,但如果TextField分配了TextFormatter,它似乎按预期工作:

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