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

0
Юрий Яхница 28 Май 2019 в 16:04

2 ответа

Лучший ответ

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

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

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

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

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

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

Для fx: корневых файлов FXML:

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>

Вы можете найти полный образец, который загружает изображения на GitHub.

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

1
Puce 30 Май 2019 в 09:58

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

<Image url="@img/site-logo.png" />
1
fabian 28 Май 2019 в 14:35
56342952