Как добавить в таблицу стилей сцены 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());