Я искал обходную проблему для этой проблемы некоторое время, но не смог ее найти.JavaFX Scene Builder Доступ к методу в другом классе
Я новичок в JavaFX, Scene Builder, FXML, CSS, в основном. У меня было три месяца опыта Java до этого, но это все.
Я создал проект; JavaFX. Я создал два пакета внутри этого проекта; контроллер и просмотр. Внутри пакета управления есть два файла; Login.java и AdministratorHomescreen.java. Внутри пакета просмотра есть четыре файла; QuizApp.fxml, QuizApp.css, Login.fxml и AdministratorHomescreen.fxml.
Я был Google и следил за различными учебниками, чтобы узнать, как делать различные вещи, и до сих пор у меня все наладилось. Но теперь я остановился.
Что я хочу делать, когда мое приложение запускается и пользователь нажимает кнопку «Войти», это пересылка их на экран «Администратор дома».
Это код в Login.java:
public class Login extends Application {
private BorderPane quizApp;
private Stage windowLogin;
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage windowLogin) {
this.windowLogin = windowLogin;
this.windowLogin.setTitle("QuizApp - Please Login or Register");
windowLogin.resizableProperty().setValue(Boolean.FALSE);
applyQuizAppLayout();
applyLoginLayout();
}
public void applyQuizAppLayout() {
try {
FXMLLoader fxmlLoader = new FXMLLoader(Login.class.getClassLoader().getResource("view/QuizApp.fxml"));
quizApp = (BorderPane) fxmlLoader.load();
Scene scene = new Scene(quizApp);
windowLogin.setScene(scene);
windowLogin.show();
} catch (IOException exception) {
exception.printStackTrace();
}
}
public void applyLoginLayout() {
try {
FXMLLoader fxmlLoader = new FXMLLoader(Login.class.getClassLoader().getResource("view/Login.fxml"));
AnchorPane windowLogin = (AnchorPane) fxmlLoader.load();
quizApp.setCenter(windowLogin);
} catch (IOException exception) {
exception.printStackTrace();
}
}
public Stage getWindowLogin() {
return windowLogin;
}
Button loginButton = new Button();
@FXML
private void handleLoginButtonAction(ActionEvent event) {
System.out.println("Login details correct.");
// windowLogin.setScene(AdministratorHomescreen.start(windowAdministratorHomescreen));
}
}
}
Строка коды в конце которой я закомментированный, где я получаю сообщение об ошибке. Ошибка читается, «не может быть разрешена переменной». Кнопка работает в некоторой степени, кроме того, поэтому при нажатии на нее отображается сообщение на консоль.
Это код в AdministratorHomepage.java:
public class AdministratorHomescreen {
private BorderPane quizApp;
private Stage windowAdministratorHomescreen;
public void start(Stage windowAdministratorHomescreen) {
this.windowAdministratorHomescreen = windowAdministratorHomescreen;
this.windowAdministratorHomescreen.setTitle("QuizApp - Welcome Administrator");
windowAdministratorHomescreen.resizableProperty().setValue(Boolean.FALSE);
applyQuizAppLayout();
applyWindowAdministratorHomescreenLayout();
}
public void applyQuizAppLayout() {
try {
FXMLLoader fxmlLoader = new FXMLLoader(Login.class.getClassLoader().getResource("view/QuizApp.fxml"));
quizApp = (BorderPane) fxmlLoader.load();
Scene scene = new Scene(quizApp);
windowAdministratorHomescreen.setScene(scene);
windowAdministratorHomescreen.show();
} catch (IOException exception) {
exception.printStackTrace();
}
}
public void applyWindowAdministratorHomescreenLayout() {
try {
FXMLLoader fxmlLoader = new FXMLLoader(
Login.class.getClassLoader().getResource("view/WindowAdministratorHomescreen.fxml"));
AnchorPane windowAdministratorHomescreen = (AnchorPane) fxmlLoader.load();
quizApp.setCenter(windowAdministratorHomescreen);
} catch (IOException exception) {
exception.printStackTrace();
}
}
public Stage getWindowAdministratorHomescreen() {
return windowAdministratorHomescreen;
}
}
Так что я знаю, что компилятор не может найти свою переменную, но в любое время изменить метод внутри AdministratorHomescreen.java он подбрасывает груз новых ошибок поэтому я сейчас просто в кругах.
Есть ли способ обойти это? Я мог бы все это сделать неправильно, но это кривая обучения в конце дня.
Любая помощь очень ценится.
P.S. Когда пользователь нажимает кнопку, я просто не хочу открывать какую-либо случайную сцену, я хочу открыть ту, которая уже добавлена QuizApp.fxml, QuizApp.css и AdministratorLogin.fxml, следовательно, макет моего кода.
Спасибо за ответ. Как добавить эти два новых метода в мой существующий код? Или для кнопки «Вход» мне нужно заменить существующий код на то, что вы там указали? И будут ли применяться мои файлы FXML и CSS? –
Хорошо, я пробовал все это по-разному, но ни один из них не работает.Начинаю думать, что я просто зашел в тупик. Спасибо, в любом случае. –