2015-08-27 6 views
4

В настоящее время я создаю программу и использую JavaFX в качестве основного параметра GUI. В настоящее время я открываю и закрываю каждый этап, когда я вхожу в каждый другой метод.Сценарий JavaFX вместо сцены

Это немного раздражает, так как пользователю открываются и закрываются многие экраны, когда они проходят через программу.

Мой вопрос в том, есть ли способ, чтобы не открывать сцену каждый раз, когда я могу перемещаться в другую часть моей программы, я мог бы переключаться между сценами вместо этого? Будет ли переключение между сценами правильной реализацией в этом сценарии? Мне нужно пройти этап между методами?

Как вы, наверное, можете сказать, что я только начинаю с JavaFX, поэтому я бы по достоинству оценил урок.

EDIT: Я решил обновить свое приложение с помощью JavaFXML. Однако у меня возникают трудности с передачей сцены в контроллер. Вот мой контроллер;

public class MainApp extends Application { 

    @FXML 
    public Stage primaryStage; 

    @FXML 
    private AnchorPane rootLayout; 

    @FXML 
    private JobInterface jInterface; 

    @Override 
    public void start(Stage primaryStage) { 
     primaryStage = new Stage(); 
     setPrimaryStage(primaryStage); 
     initRootLayout(); 
    } 

    @FXML 
    public void initRootLayout(){ 
     try { 
      primaryStage = getPrimaryStage(); 
      FXMLLoader loader = new FXMLLoader(); 
      loader.setLocation(MainApp.class.getResource("MainInterface.fxml")); 
      rootLayout = (AnchorPane) loader.load();   
      Scene scene = new Scene(rootLayout);  
      primaryStage.setScene(scene); 
      primaryStage.show(); 
      setPrimaryStage(primaryStage); 
     } catch (IOException e) { 
       e.printStackTrace(); 
     } 
    } 

    @FXML 
    private void setJobLayout(){ 
     primaryStage = getPrimaryStage(); 
     jInterface = new JobInterface(); 
     jInterface.initJobLayout(); 
     primaryStage.setScene(jInterface.getScene()); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 

    public Stage getPrimaryStage() { 
     return primaryStage; 
    } 

    public void setPrimaryStage(Stage primaryStage) { 
     this.primaryStage = primaryStage; 
    } 
} 

Вот это метод, который изменяет сцену, используя другой файл FXML и пытается передать сцену обратно к контроллеру;

public class JobInterface { 

    private AnchorPane rootLayout; 
    private Scene scene; 

    public void initJobLayout(){ 
     try { 
      FXMLLoader loader = new FXMLLoader(); 
      loader.setLocation(MainApp.class.getResource("JobInterface.fxml")); 
      rootLayout = (AnchorPane) loader.load(); 
      scene = new Scene(rootLayout); 
      setScene(scene); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    public Scene getScene() { 
     return scene; 
    } 

    public void setScene(Scene scene) { 
     this.scene = scene; 
    } 
} 

Проблема у меня в настоящее время является NullPointerException на этой линии в главном приложении;

primaryStage.setScene(jInterface.getScene()); 

Любые идеи о том, куда я иду, не так?

+0

Да, вы можете сохранить основной этап, который предоставляет JavaFX в init и изменить свою сцену для разных «страниц» пользовательского интерфейса. Или, поскольку сцена имеет только один корневой узел, вы можете даже использовать ту же сцену и изменить корневой узел на разных «страницах». В обоих случаях не забудьте вызвать primaryStage.sizeToScene() после перехода на новую «страницу». –

+0

Так что мне просто нужно пройти сцену через каждый метод? Будет ли это работать правильно? Пример: uInterface.UserUI (соединение, primaryStage); – jbanks

+0

Существуют разные подходы. Некоторые парни держат основную стадию публичной статикой и получают доступ к ней напрямую. Некоторые получают сцену, (в классе контроллера) anynode.getScene(), или на этапе anynode.getScene(). GetWindow(). –

ответ

2

неанимированного

Для изменения сцены без анимации учебников: http://docs.oracle.com/javafx/2/api/javafx/stage/Stage.html#setScene%28javafx.scene.Scene%29 http://docs.oracle.com/javafx/2/api/javafx/scene/layout/Pane.html#getChildren%28%29

Animated

Для изменения сцены с Анимационными учебными пособиями: https://blogs.oracle.com/acaicedo/entry/managing_multiple_screens_in_javafx1 https://blogs.oracle.com/acaicedo/entry/managing_multiple_screens_in_javafx

+0

Ссылки больше не работают. –