2015-01-08 1 views
2

Я пытаюсь выяснить, есть ли способ получить ссылку на FXML для данного узла.JavaFX 8 есть способ получить ссылку FXML с узла?

Для примера я динамически загружаются взгляды - Предположим, у меня есть Pane ссылки в текущем контроллере:

private void openView() { 
    FXMLLoader loader = new FXMLLoader(); 
    Parent node = loader.load(this.getClass().getResource("MyView.fxml").openStream()); 
    pane.getChildren().add(node); 
    node.requestFocus(); 
} 

Я хотел бы сохранить, какие взгляды были открыты, так что я могу возобновить их в следующий раз окно открытый. Что-то вроде этого:

private void saveOpenViews() { 
    pane.getChildren().forEach(child -> { 
     String fxmlLocation = child.getFXML(); 
     etc.... 
    } 
} 

Я не могу найти способ, чтобы получить, что обратно упорствовать, что было открыто ... Надеялся, что есть способ, кроме ручного отслеживания в другом месте.

Спасибо.

ответ

1

Храните связанную информацию fxml в узле userData, когда вы загружаете узел из fxml, а затем просматривайте пользовательские данные, когда вам нужно знать, с чем связан fxml.

private void openView() { 
    FXMLLoader loader = new FXMLLoader(); 
    URL fxmlLocation = this.getClass().getResource("MyView.fxml"); 
    Parent node = loader.load(fxmlLocation.openStream()); 
    node.setUserData(fxmlLocation); 
    pane.getChildren().add(node); 
    node.requestFocus(); 
} 

private void saveOpenViews() { 
    pane.getChildren().forEach(child -> { 
     URL fxmlLocation = (URL) child.getUserData(); 
     etc.... 
    } 
} 
+0

При использовании FXML у вас обычно будет класс контроллера. Создайте абстрактный класс контроллера, который содержит необходимые методы getter и setter. Весь ваш контроллер расширит этот класс. Затем вы можете получить доступ к контроллеру с помощью fxmlLoader.getController() и вызвать установщик для местоположения FXML. Вы можете хранить контроллеры ваших открытых просмотров в списке. Как только метод save вызывается, вам нужно только перебрать ваши контроллеры и получить xml. Если вам нужна дополнительная гибкость для определения контроллера вида, вы можете использовать DataFX (http://www.guigarage.com/2014/05/datafx-8-0-tutorials/) –

+0

Спасибо за информацию Хендрика. Вероятно, лучше всего давать ответы как ответы, а не комментарии. – jewelsea

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