JavaFX |用户名和密码检查不正常
JavaFX | username and password checking does not work right
我正在使用 JavaFX 并创建了一个登录表单。所以我想测试不可避免的,插入用户名和密码来检查是否正确。问题是它没有像预期的那样运行。无论如何,它总是会转到 else 主体。代码如下:
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");
}
}
}
我不知道我是否遗漏了一些非常明显的东西或者什么...
提前致谢!
问题是您使用了 TextField.getCharacters()
方法。这与调用 TextField.getText()
不同。目前,对于 Java 10,方法 TextField.getCharacters()
returns 是 StringBuilder
(这是 CharSequence
)而不是 String
。这是可以预料的,因为 Java 文档指出:
Returns the character sequence backing the text field's content.
"content" 很可能意味着支持 TextInputControl.Content
,TextField
的源代码似乎证实了这一点。但是,您要比较的是 TextField
的 textProperty()
中包含的 String
。
显然,我不知道这一点(尽管可以理解),a StringBuilder
不等于 a 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()
和 pass.getText()
。
我正在使用 JavaFX 并创建了一个登录表单。所以我想测试不可避免的,插入用户名和密码来检查是否正确。问题是它没有像预期的那样运行。无论如何,它总是会转到 else 主体。代码如下:
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");
}
}
}
我不知道我是否遗漏了一些非常明显的东西或者什么...
提前致谢!
问题是您使用了 TextField.getCharacters()
方法。这与调用 TextField.getText()
不同。目前,对于 Java 10,方法 TextField.getCharacters()
returns 是 StringBuilder
(这是 CharSequence
)而不是 String
。这是可以预料的,因为 Java 文档指出:
Returns the character sequence backing the text field's content.
"content" 很可能意味着支持 TextInputControl.Content
,TextField
的源代码似乎证实了这一点。但是,您要比较的是 TextField
的 textProperty()
中包含的 String
。
显然,我不知道这一点(尽管可以理解),a StringBuilder
不等于 a 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()
和 pass.getText()
。