У меня есть некоторые проблемы с настройкой пути к локальному изображению в моем приложении javaFX. Я хочу использовать значок для своей кнопки, но он не работает для локальных изображений, только с внешними ресурсами. Это мой код:
<Button fx:id = "magicWangButton" mnemonicParsing = "false" onAction = "#magicWang" text = "Magic wang">
<graphic>
<ImageView fitHeight = "20.0" fitWidth = "20.0" pickOnBounds = "true" preserveRatio = "true">
<image>
<!--<Image url = "/fxml/img/magic-wang.png" />-->
<Image url = "https://i.stack.imgur.com/y1evM.png" />
<!--<Image url = "/fxml/img/site-logo.png" />-->
<Image url = "img/magic-wang.png"/>
</image>
</ImageView>
</graphic>
</Button>
эта строка работает нормально:
<Image url = "https://i.stack.imgur.com/y1evM.png" />
, но другие... Мое изображение находится по пути: resources/fxml/img/ все файлы fxml, расположенные в каталоге fxml. Я видел другие вопросы и ответы, но он использует конфигурацию в java-файлах, но это не то, что я ищу.
Хитрость заключается в том, чтобы начать URL-адрес с «@» и вызвать FXMLLoader.setLocation().
Обратите внимание, что я реализовал служебный класс: FXMLLoaders.
Если вы придерживаетесь следующих соглашений об именах:
вы можете использовать следующий код:
Для файлов FXML на базе fx:root:
public MyComponent() {
FXMLLoaders.loadRoot(this);
}
Иначе:
Parent root = FXMLLoaders.load(FxmlSampleApplication.class);
Библиотека доступна в Maven Central:
<dependency>
<groupId>org.drombler.commons</groupId>
<artifactId>drombler-commons-fx-core</artifactId>
<version>0.13</version>
</dependency>
Вы можете найти полный пример загрузки изображений на Гитхаб.
Я также написал Сообщение блога об этом служебном классе и соглашениях об именах.