登录失败后如何重新打开/防止ControlsFX LoginDialog关闭? [英] How to reopen/prevent closing of ControlsFX LoginDialog on failed login?

查看:80
本文介绍了登录失败后如何重新打开/防止ControlsFX LoginDialog关闭?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的应用程序中,首先要做的是请求用户使用controlsFX LoginDialog进行登录.如果登录成功,则显示该应用程序,但是如果登录失败,则会关闭登录窗口.

In my application, the first I do is request the user to login using the controlsFX LoginDialog. If the login is successful, I display the application, however if it fails the login window will close.

我希望登录窗口保持打开状态,以允许用户尝试再次登录.

I would rather the login window stay open to allow the user to attempt to login again.

public void start(Stage stage) throws Exception {

    LoginDialog ld = new LoginDialog(new Pair<String, String>("", ""), new Callback<Pair<String,String>, Void>() {
        @Override
        public Void call(Pair<String, String> info) {
            boolean success = login(info.getKey(), info.getValue());
            if(success){
               openDriverWindow(stage);
            }else {
               //Display error message      
            }
            return null;
        }
    });
    ld.show();

}

如果登录失败,则对话框关闭-要求用户重新打开应用程序.

If the login is unsuccessful, the dialog closes - which requires the user to reopen the application.

推荐答案

您可以使用将于2015年3月发布的JDK8u40中的对话框,也可以使用ConrolsFX(openjfx-dialogs-1.0.2)中的对话框.有一个实现Dialog的代码,直到未通过身份验证,该代码才会关闭.

You can use Dialog from JDK8u40 which will be released at march 2015 or use dialogs from ConrolsFX (openjfx-dialogs-1.0.2). There is a code to implement Dialog which will not be closed until authentication is not passed.

// Create the custom dialog.
Dialog<Pair<String, String>> dialog = new Dialog<>();
dialog.setTitle("Login Dialog");
dialog.setHeaderText("Look, a Custom Login Dialog");
dialog.setGraphic(new ImageView(this.getClass().getResource("login.png").toString()));

// Set the button types.
ButtonType loginButtonType = new ButtonType("Login", ButtonData.OK_DONE);
dialog.getDialogPane().getButtonTypes().addAll(loginButtonType, ButtonType.CANCEL);

// Create the username and password labels and fields.
GridPane grid = new GridPane();
grid.setHgap(10);
grid.setVgap(10);
grid.setPadding(new Insets(20, 150, 10, 10));

TextField username = new TextField();
username.setPromptText("Username");
PasswordField password = new PasswordField();
password.setPromptText("Password");

grid.add(new Label("Username:"), 0, 0);
grid.add(username, 1, 0);
grid.add(new Label("Password:"), 0, 1);
grid.add(password, 1, 1);

// Enable/Disable login button depending on whether a username was entered.
Button loginButton = (Button)dialog.getDialogPane().lookupButton(loginButtonType);
loginButton.setDisable(true);
**// Prevent closing dialog if not authenticated**
loginButton.addEventFilter(ActionEvent.ACTION, (event) -> { 
  if (!authenticated()) { 
    event.consume(); 
  } 
}); 
// Do some validation (using the Java 8 lambda syntax).
username.textProperty().addListener((observable, oldValue, newValue) -> {
    loginButton.setDisable(newValue.trim().isEmpty());
});

dialog.getDialogPane().setContent(grid);

// Request focus on the username field by default.
Platform.runLater(() -> username.requestFocus());

// Convert the result to a username-password-pair when the login button is clicked.
dialog.setResultConverter(dialogButton -> {
    if (dialogButton == loginButtonType) {
        return new Pair<>(username.getText(), password.getText());
    }
    return null;
});

Optional<Pair<String, String>> result = dialog.showAndWait();

result.ifPresent(usernamePassword -> {
    System.out.println("Username=" + usernamePassword.getKey() + ", Password=" + usernamePassword.getValue());
});

此示例来自以下文章例子

这篇关于登录失败后如何重新打开/防止ControlsFX LoginDialog关闭?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆