Как активировать кнопку ОК, нажав ввод на TextField? - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть этот класс, который генерирует диалог оповещения с полем для ввода пароля, и хочу активировать кнопку OK при нажатии Введите в поле пароля.

public class PasswordDialog extends Dialog<String> {
    private PasswordField passwordField;

    public PasswordDialog(boolean usuario) {
        setTitle("Senha");
        if (usuario == true){
            setHeaderText("Por favor insira a senha do usuário.");
        }else{
            setHeaderText("Por favor insira a senha do administrador.");
        }

        ButtonType passwordButtonType = new ButtonType("OK", ButtonData.OK_DONE);
        getDialogPane().getButtonTypes().addAll(passwordButtonType, ButtonType.CANCEL);

        passwordField = new PasswordField();
        passwordField.setPromptText("Password");

        HBox hBox = new HBox();
        hBox.getChildren().add(passwordField);
        hBox.setPadding(new Insets(20));

        HBox.setHgrow(passwordField, Priority.ALWAYS);

        getDialogPane().setContent(hBox);

        Platform.runLater(() -> passwordField.requestFocus());

        setResultConverter(dialogButton -> {
            if (dialogButton == passwordButtonType) {
                return passwordField.getText();
            }
            return null;
        });
    }

    public PasswordField getPasswordField() {
        return passwordField;
    }
}

1 Ответ

0 голосов
/ 18 декабря 2018

На самом деле это должно происходить по умолчанию (по крайней мере, это поведение в JavaFX 11 / Win 10), но вы также можете закрыть Dialog самостоятельно, вызвав setResult и close.

Примерзакрытие по клавишам со стрелками:

// in constructor
passwordField.setOnKeyPressed(evt -> {
    if (evt.getCode().isArrowKey()) {
        setResult(passwordField.getText());
        close();
    }
});

Для закрытия по нажатию клавиши ввода используйте onAction событие PasswordField:

// in constructor
passwordField.setOnAction(evt -> {
    setResult(passwordField.getText());
    close();
});

Для более сложныхПоведение resultConverter, вы также можете использовать его для установки результата, чтобы избежать дублирования кода:

setResult(getResultConverter().call(passwordButtonType));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...