Ява fx-8. Как настроить путь к локальному образу с помощью файла fxml

У меня есть некоторые проблемы с настройкой пути к локальному изображению в моем приложении 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-файлах, но это не то, что я ищу.

Применение градиента к изображению с помощью CSS
Применение градиента к изображению с помощью CSS
Здравствуйте, братья и сестры, как дела? Недавно я застрял на применении градиента к изображению. Я применял это много раз, но иногда наши требования...
Получение URL-адреса изображения курса в Moodle с помощью PHP
Получение URL-адреса изображения курса в Moodle с помощью PHP
Moodle - это популярная система управления обучением с открытым исходным кодом, используемая многими учебными заведениями и организациями по всему...
0
0
758
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете указать путь относительно fxml, начав значение атрибута с @, см. Введение в FXML: разрешение местоположения

<Image url = "@img/site-logo.png" />
Ответ принят как подходящий

Хитрость заключается в том, чтобы начать URL-адрес с «@» и вызвать FXMLLoader.setLocation().

  • относительные URL-адреса:
    • @one24.png:
    • @image/two24.png
    • @../three24.png
  • абсолютные URL:
    • @/four24.png
    • @/изображение/five24.png

Обратите внимание, что я реализовал служебный класс: FXMLLoaders.

Если вы придерживаетесь следующих соглашений об именах:

  • MyComponent.java
  • MyComponent.fxml (тот же пакет, что и MyComponent.java)
  • MyComponent.properties (тот же пакет, что и MyComponent.java)

вы можете использовать следующий код:

Для файлов 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>

Вы можете найти полный пример загрузки изображений на Гитхаб.

Я также написал Сообщение блога об этом служебном классе и соглашениях об именах.

Другие вопросы по теме