Получение ссылки на FXML ImageView - PullRequest
1 голос
/ 29 октября 2019

Я делаю игру на JavaFX, для которой у меня есть сетка ImageViews 5x9, а также несколько ярлыков. Когда я пытаюсь получить ссылку на этикетку, я успешен. Однако, когда я пытаюсь получить ссылку на ImageView, я получаю исключение nullPointerException.

Вот как объявляется root:

FXMLLoader loaderTwo = new FXMLLoader(getClass().getResource("/game/levelTwo.fxml"));
Parent rootTwo = loaderTwo.load();
this.handlerTwo = loaderTwo.getController();

Вот часть FXML метки:

<Label fx:id="sunCountLabel" layoutX="121.0" layoutY="15.0" minHeight="72.2891845703125" prefHeight="88.0" prefWidth="203.0" text="Label">
  <font>                                                                                                                                  
    <Font name="Gabriola" size="60.0" />                                                                                                  
  </font>                                                                                                                                 
</Label> 

FXML часть представления изображения:

<ImageView fx:id="OneFive" fitHeight="180.0" fitWidth="180.0" layoutX="892.0" layoutY="102.0">
  <effect>                                                                                   
    <DropShadow height="1.0" radius="0.0" width="1.0" />                                     
  </effect>                                                                                  
  <image>                                                                                    
    <Image url="@../media/half.png" />                                                       
  </image>                                                                                   
</ImageView>        

Здесь я на них ссылаюсь:

this.root = this.map.getLevel(2).getRoot();
Label l = (Label)this.root.lookup("#sunCountLabel");
ImageView i = (ImageView)this.root.lookup("OneFive");
System.out.println(i==null);
l.setText("1999");

Проблема в том, что Label работает правильно, но Imageview дает исключение nullPointerException
Я не понимаю, почему?
Кроме того, сцена загружается отлично, нет проблем с адресом изображения и т. Д.

1 Ответ

2 голосов
/ 29 октября 2019

Селектор, который вы используете, является селектором типа, то есть он будет работать, только если узел вернул "OneFive" из getTypeSelector метода . ImageView не делает этого.

Вы, вероятно, хотели использовать селектор идентификатора. Для этого необходимо вставить # в начале строки селектора:

ImageView i = (ImageView)this.root.lookup("#OneFive");

Я настоятельно рекомендую ввести ImageView в поле контроллера и получить доступ к ImageView через контроллер,Также обратите внимание, что есть случаи, когда lookup не работает. Поиск содержимого внутри ScrollPane, например, не работает до первого прохода макета, поскольку структура узла, к которой добавляется content, создается во время первого прохода макета.

...