Вот мой файл login.fxml. файл:
Код: Выделить всё
Код: Выделить всё
package edu.virginia.sde.reviews;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyCode;
import javafx.stage.Stage;
import java.io.IOException;
import java.sql.SQLException;
public class LoginController {
@FXML
private TextField usernameField;
@FXML
private TextField passwordField;
@FXML
private Label resultLabel;
@FXML
private Label infoLabel;
@FXML
private Label errorLabel;
private CurrentUser currentUser = CurrentUser.getInstance();
private Stage primaryStage;
public void setPrimaryStage(Stage primaryStage) {
this.primaryStage = primaryStage;
}
public void setCurrentUser(CurrentUser currentUser) {
this.currentUser = currentUser;
}
@FXML
public void handleLogin() {
errorLabel.setText("");
resultLabel.setText("Press ENTER to log in, or TAB to create an account.");
infoLabel.setText("Passwords must be at least 8 characters long.");
String username = usernameField.getText();
String password = passwordField.getText();
try {
User user = DatabaseService.authenticateUser(username, password);
if (user == null) {
errorLabel.setText("Invalid username or password. If you don't have an account, re-enter your username and password and select \"Create Account\".");
}
else {
currentUser.setUser(user);
handleTransitionToCourseSearch();
}
} catch (SQLException e) {
errorLabel.setText("Database error; please try again.");
}
}
@FXML
public void handleKeyPress() {
usernameField.setOnKeyPressed(event -> {
if (event.getCode() == KeyCode.ENTER) {
handleLogin();
}
else if (event.getCode() == KeyCode.TAB) {
handleAccountCreation();
}
});
passwordField.setOnKeyPressed(event -> {
if (event.getCode() == KeyCode.ENTER) {
handleLogin();
}
else if (event.getCode() == KeyCode.TAB) {
handleAccountCreation();
}
});
}
@FXML
public void handleAccountCreation() {
errorLabel.setText("");
resultLabel.setText("Press ENTER to log in, or TAB to create an account.");
infoLabel.setText("Passwords must be at least 8 characters long.");
String username = usernameField.getText();
String password = passwordField.getText();
try {
if (DatabaseService.isDuplicateUsername(username)) {
errorLabel.setText("Username is already in use.");
}
else if (password.length() < 8) {
errorLabel.setText("Password must be at least 8 characters.");
}
else {
DatabaseService.createUser(username, password);
infoLabel.setText("");
resultLabel.setText("Account creation successful! Please log in.");
}
} catch (SQLException e) {
errorLabel.setText("Database error; please try again.");
}
}
@FXML
public void handleClose() {
currentUser.clearUser();
//URL: [youtube]exIQqcQ0lzI[/youtube]
//Lines 111 and 112 were taken from 3:53 of this video.
Stage stage = (Stage) resultLabel.getScene().getWindow();
stage.close();
}
public void handleTransitionToCourseSearch() {
try {
var fxmlLoader = new FXMLLoader(CourseSearchController.class.getResource("course-search.fxml"));
var newScene = new Scene(fxmlLoader.load());
var controller = (CourseSearchController) fxmlLoader.getController();
controller.setPrimaryStage(primaryStage);
controller.setCurrentUser(currentUser);
controller.updateTable();
primaryStage.setScene(newScene);
primaryStage.show();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
Код: Выделить всё
package edu.virginia.sde.reviews;
import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.stage.WindowEvent;
public class CourseReviewsApplication extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage) throws Exception {
DatabaseService.initializeDatabase();
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("login.fxml"));
Scene scene = new Scene(fxmlLoader.load());
var controller = (LoginController) fxmlLoader.getController();
controller.setPrimaryStage(stage);
stage.setTitle("Course Reviews");
stage.setScene(scene);
stage.show();
}
}
Я попробовал использовать операторы печати, чтобы узнать, связана ли проблема с кнопкой или логикой, и с помощью них обнаружил проблема была в самой кнопке. Я пробовал искать решения в Google, но ничего не нашел.
Подробнее здесь: https://stackoverflow.com/questions/792 ... don-t-work
Мобильная версия