2016-03-17 2 views
0

Я искал обходную проблему для этой проблемы некоторое время, но не смог ее найти.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, следовательно, макет моего кода.

ответ

0

В прослушивателе для входа в систему вы должны передать соответствующую информацию на следующий этап.

Сначала установите слушатель для вашего журнала в кнопках в классе входа

loginbutton.setOnAction(new EventHandler<ActionEvent>() { 
    @Override 
    public void handle(ActionEvent t) { 
    try{ 
     if("the login is successful"){ 
     String temp = "Your relevant user information, like username or however you keep track of your data"; 
     windowLogin.hide(); 
     //You'll then make a new stage to pass the info to the administrator page 
     AdministratorHomeScreen nextStage = new AdministratorHomeScreen(windowLogin, temp); 
     } 
     else{ 
       System.out.println("incorrect login); 
      } 
     } 
catch(Exception e){ 
e.printStackTrace(); 
} 
} 
}); 

Тогда в классе AdministratorHomeScreen вы будете делать

public AdministratorHomeScreen(Stage stage, String takenOver){ 
windowLogIn = stage; 
temp = takenOver; 
start(new Stage()); 
} 

Я уверен, что только о прикрывает его ,

Редактировать: отформатирован верхний бит кода, чтобы сделать его более легким для чтения.

+0

Спасибо за ответ. Как добавить эти два новых метода в мой существующий код? Или для кнопки «Вход» мне нужно заменить существующий код на то, что вы там указали? И будут ли применяться мои файлы FXML и CSS? –

+0

Хорошо, я пробовал все это по-разному, но ни один из них не работает.Начинаю думать, что я просто зашел в тупик. Спасибо, в любом случае. –

Смежные вопросы