JavaFX |用户名和密码检查不正常

时间:2018-06-17 14:12:57

标签: java events javafx fxml

我正在玩JavaFX并创建了一个登录表单。所以我想测试不可避免的,插入usernmae和密码来检查是否正确。问题是它没有按预期运行。无论如何,它总是会转向其他身体。代码如下:

public class Controller {
    @FXML PasswordField pass;
    @FXML TextField name;
    @FXML javafx.scene.control.Button login;
    @FXML Hyperlink signup;
    @FXML Label errormessage;

    @FXML private void buttonPressed() {
        checkUser();
    }

    @FXML private void ifEnterIsPressed(KeyEvent k) {
        if (k.getCode() == KeyCode.ENTER)
            checkUser();
    }

    @FXML private void checkUser() {
        System.out.println(name.getCharacters());
        System.out.println(pass.getCharacters());
        if (name.getCharacters().equals("Marios") && pass.getCharacters().equals("19981998")) {
            errormessage.setVisible(false);
            System.out.println("Access granted!");
        }
        else {
            errormessage.setText("Wrong username or password");
            System.out.println("Access denied");
        }
    }
}

我不知道我是否遗漏了一些完全明显的东西或者是什么...

提前致谢!

1 个答案:

答案 0 :(得分:3)

问题是您使用TextField.getCharacters()方法。这与调用TextField.getText()不同。目前,对于Java 10,方法TextField.getCharacters()返回StringBuilderCharSequence)而不是String。这是可以预期的,因为Javadoc声明:

  

返回支持文本字段内容的字符序列。

通过"内容"它很可能意味着支持TextInputControl.ContentTextField的源代码似乎证实了这一点。但是,您要比较的是String的{​​{1}}中包含的textProperty()

显然,我并不知道这一点(尽管可以理解),TextField 不等于 StringBuilder,即使它们包含相同的字符。或者,把它放在代码中:

String

因此,要直接回答,请分别将StringBuilder sb = new StringBuilder("Hello, World!"); String s = "Hello, World!"; sb.equals(s); // FALSE sb.toString().equals(s); // TRUE name.getCharacters()更改为pass.getCharacters()name.getText()