Как добавить в таблицу стилей сцены JavaFX из другого модуля в Java 9?

У меня есть два модуля JPMS:

  • Модуль-а
  • Модуль-б

В модуле-а у меня есть что-то вроде:

public class MyAppplication extends Application {
   ....
   public static void addCss(String path) {
       stage.getScene().getStylesheets().add(path);
   }
}

В модуле-b у меня есть CSS-файл, который я хочу добавить в MyApplication, Как это сделать в коде в модуле-б? Я не могу понять, как передать путь из другого модуля.

Я имею в виду в модуле-б:

...
MyApplication.addCss(???);
...

РЕДАКТИРОВАТЬ
В OSGi я использовал следующее решение в bundle-b (при условии, что модуль-a был bundle-a, а module-b был bundle-b):

String pathInBundleB = "com/foo/package-in-bundle-b/file.css"
Bundle bundleB = FrameworkUtil.getBundle(this.getClass()).getBundleContext().getBundle();
URL cssFileUrl = bundleB.getEntry(pathInBundleB);
MyApplication.addCss(cssFileUrl.toString());

1 ответ

Решение

Я нашел решение с помощью @AlanBateman.

Предполагая, что файл CSS находится в com/foo/some-package/file.css Я использую следующий код в модуле-б:

package com.foo.some-package;

public class SomeClass {

  public void init() {
      MyApplication.addCss(this.getClass().getResource("base.css").toString());
  }
}

Кроме того, в module-info модуля-b у меня есть:

opens com.foo.some-package to module-a;
package org.apis.style.css;

public class CommonCss {

    public static String getCommonCssStyle(){
       return CommonCss.class.getClassLoader().getResource("common.css").toExternalForm();
    }
}

Экспортируйте этот пакет для всех.

В другом модуле я добавляю это

getStylesheets().add(CommonCss.getCommonCssStyle());
Другие вопросы по тегам