Java FX-8.Как настроить путь к локальному изображению с помощью файла fxml - PullRequest
0 голосов
/ 28 мая 2019

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

Ответы [ 2 ]

1 голос
/ 30 мая 2019

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

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

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

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

  • MyComponent.java
  • MyComponent.fxml (тот же пакет, что и MyComponent.java)
  • MyComponent.Свойства (тот же пакет, что и у 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 .

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

1 голос
/ 28 мая 2019

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

<Image url="@img/site-logo.png" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...