如何从 Java 9 中的另一个模块添加到 JavaFX 场景样式表?
How to add to JavaFX Scene stylesheet from another module in Java 9?
我有两个 JPMS 模块:
- 模块-a
- 模块-b
在模块-a中我有类似的东西:
public class MyAppplication extends Application {
....
public static void addCss(String path) {
stage.getScene().getStylesheets().add(path);
}
}
在模块-b 中,我有 CSS 文件,我想将其添加到 MyApplication
。如何在 module-b 的代码中做到这一点?我不明白如何从另一个模块传递路径。
我的意思是在模块 b 中:
...
MyApplication.addCss(???);
...
编辑
在 OSGi 中,我在 bundle-b
中使用了以下解决方案(假设 module-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());
我在@AlanBateman 的帮助下找到了解决方案。
假设 css 文件在 com/foo/some-package/file.css
中,我在模块 b 中使用以下代码:
package com.foo.some-package;
public class SomeClass {
public void init() {
MyApplication.addCss(this.getClass().getResource("base.css").toString());
}
}
此外,在module-b的module-info中我有:
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());
我有两个 JPMS 模块:
- 模块-a
- 模块-b
在模块-a中我有类似的东西:
public class MyAppplication extends Application {
....
public static void addCss(String path) {
stage.getScene().getStylesheets().add(path);
}
}
在模块-b 中,我有 CSS 文件,我想将其添加到 MyApplication
。如何在 module-b 的代码中做到这一点?我不明白如何从另一个模块传递路径。
我的意思是在模块 b 中:
...
MyApplication.addCss(???);
...
编辑
在 OSGi 中,我在 bundle-b
中使用了以下解决方案(假设 module-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());
我在@AlanBateman 的帮助下找到了解决方案。
假设 css 文件在 com/foo/some-package/file.css
中,我在模块 b 中使用以下代码:
package com.foo.some-package;
public class SomeClass {
public void init() {
MyApplication.addCss(this.getClass().getResource("base.css").toString());
}
}
此外,在module-b的module-info中我有:
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());