Извините, что я новичок в JavaFX. Моя настройка: У меня есть один основной графический интерфейс FXML, который отображается все время. Внутри этого основного графического интерфейса я загрузил еще один FXML в AnchorPane.Как я могу ссылаться на тот же элемент FXML из экземпляра того же класса
Второй FXML загружается в этом AnchorPane (который является в основном GUI), первоначально с использованием:
@FXML
private AnchorPane rootSetPane;
я затем использовать rootSetPane
оттуда. Это AnchorPane, которая находится внутри одного и того же основного графического интерфейса.
<AnchorPane fx:id="rootSetPane" layoutX="228.0" prefHeight="710.0" prefWidth="887.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="228.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
Инициализировать главный контроллер (основной графический интерфейс отображается все время)
@Override
public void initialize(URL url, ResourceBundle rb) {
AnchorPane paneHome;
try {
paneHome = FXMLLoader.load(getClass().getResource("HomePage.fxml"));
rootSetPane.getChildren().setAll(paneHome);
} catch (IOException ex) {
Logger.getLogger(FXMLDocumentController.class.getName()).log(Level.SEVERE, null, ex);
}
}
Пример рабочего метода в этом основном классе (это называется с помощью кнопки в одной и той же основной FXML):
@FXML
private void foodFinder(ActionEvent event) throws IOException {
AnchorPane paneFoodFinder = FXMLLoader.load(getClass().getResource("ScreenFoodFinder.fxml"));
rootSetPane.getChildren().setAll(paneFoodFinder);
}
примером метода, который не работает (это называется использованием объекта):
public void setPanel() throws IOException {
AnchorPane newPane = FXMLLoader.load(getClass().getResource("NewPane.fxml"));
rootSetPane.getChildren().setAll(newPane);
}
Я установил эту вторую панель несколько раз во время программы, используя кнопки в главном графическом интерфейсе (это работает). Проблема возникает при попытке установить эту панель вне класса основного контроллера. Я не могу использовать экземпляр класса Main и вызвать метод для доступа к rootSetPane
(и я не могу сделать статический файл rootSetPane
). Я получаю NullPointerException
. Я уверен, что это любительская ошибка. Есть ли способ, которым я могу изменить этот rootSetPane
, используя метод, подобный приведенному выше.
Или мне нужно сделать другие классы для управления экранами. Было бы оценено самое простое (даже грязное) решение.
Это также сработает, если я смогу запустить кнопку в главном графическом интерфейсе, но это приводит к той же проблеме (NullPointerException
). Я чувствую, что не могу ссылаться на элементы, используя объект класса, и я также не могу сделать эти элементы статичными.
Когда я создам объект этого класса в последовательности моей программы? – lolftw
@lolftw Вы можете создать его в качестве члена класса Main или создать его, когда захотите, и сделать его статическим окончательным. – GOXR3PLUS
Как я уже говорил, я совершенно новичок в этом, и я думаю, что я реализую это неправильно. Я получаю эту ошибку: 'javafx.fxml.LoadException: Root не был установлен. Используйте метод setRoot() перед загрузкой. ' – lolftw