Я пытаюсь вызвать event.getSource().getGraphic()
в расширенном событии ветви TreeItem
, чтобы я мог установить другую иконку, но я продолжаю получать NullPointerException
, и я не могу понять, почему.Я могу успешно установить значок при настройке фабрики ячеек, но когда я слушаю, что событие в расширенном филиале делает то же самое, оно не работает.Вот как я настраиваю дерево (из события инициализации в моем контроллере):
tree.setCellFactory(param -> new TreeCell<File>() {
@Override
public void updateItem(File item, boolean empty) {
super.updateItem(item, empty);
if (empty) {
setText("");
setGraphic(null);
} else {
setText(item.getName());
Image icon = new Image(getClass().getResourceAsStream("folder.png"));
setGraphic(new ImageView(icon));
}
}
});
Это прекрасно работает и отлично.
Вот мой прослушиватель событий, где ImageView
по какой-то причине равен нулю (также добавляется в событие инициализации в моем TreeView
контроллере):
File home = new File(System.getProperty("user.home"));
TreeItem<File> root = new TreeItem<>(home);
tree.setRoot(root);
root.addEventHandler(TreeItem.branchExpandedEvent(), event -> {
TreeItem source = event.getSource();
ImageView img = (ImageView)source.getGraphic(); // this is null!
Image icon = Image(getClass().getResourceAsStream("folder-open.png"));
img.setImage(icon);
});
Есть ли у кого-нибудь идеи?что я делаю не так?Я использую Java 1.8.