На самом деле здесь довольно много проблем с вашим дизайном.Прежде всего, вы пытаетесь получить доступ к значениям элементов управления txtField
и passField
до того, как эти элементы управления фактически появятся в сцене.
В JavaFX и FXML эти элементы управления не создаются (или вводятся)и доступно для контроллера до инициализации сцены.
Контрольные ссылки также должны быть private
и снабжены ключевым словом @FXML
, например:
@FXML
private TextField txtField;
Это по существусообщает Java, что TextField
уже определено в соответствующем документе FXML.
И вам необходимо получить значения полей имени пользователя и пароля после того, как была нажата кнопка LOGIN
щелкнул, поэтому обновите ваш метод onClick()
, чтобы получить значения в это время:
public void onClick() {
String usnm = txtField.getText();
String pass = passField.getText();
String acc;
if (usnm.equals(USNM)) {
if (pass.equals(PASS)) {
acc = ACCESS_GRANTED;
} else {
acc = ACCESS_DENIED;
}
} else {
acc = ACCESS_DENIED;
}
System.out.println(acc);
}
Итак, для немного лучшего Controller.java
, вы можете использовать что-то вроде этого:
public class Controller {
@FXML
public TextField txtField;
@FXML
public PasswordField passField;
@FXML
public Button btn;
@FXML
public Label access;
private String USNM = "crimsoncoder";
private String PASS = "toor";
private static final String ACCESS_GRANTED = "/ACCESS_GRANTED/";
private static final String ACCESS_DENIED = "|/?ACCESS_DENIED?/|";
public void onClick() {
String usnm = txtField.getText();
String pass = passField.getText();
String acc;
if (usnm.equals(USNM)) {
if (pass.equals(PASS)) {
acc = ACCESS_GRANTED;
} else {
acc = ACCESS_DENIED;
}
} else {
acc = ACCESS_DENIED;
}
System.out.println(acc);
}
}