【问题标题】:How to add to JavaFX Scene stylesheet from another module in Java 9?如何从 Java 9 中的另一个模块添加到 JavaFX 场景样式表?
【发布时间】:2017-09-22 18:44:17
【问题描述】:

我有两个 JPMS 模块:

  • 模块-a
  • 模块-b

在 module-a 中我有类似的东西:

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

在 module-b 中,我有想要添加到 MyApplication 的 CSS 文件。如何在 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());

【问题讨论】:

  • 到目前为止你尝试过什么?更新问题,请不要在没有调试或尝试的情况下简单地发布问题。
  • 另外请注明,这怎么和stackoverflow.com/questions/46369101/…不一样?
  • module-b 可以访问自己的资源,因此 module-b 应该有一个公共方法,该方法返回对 Class.getResource 或 Class.getResourceAsStream 的内部调用的结果。
  • @nullpointer 那是完全不同的问题。这个问题是关于 ResourceBunlde 的。正如它发现的那样,为了在另一个模块中使用一个模块的 ResourceBundle,那么第一个模块必须提供一些 JPSM 服务,而第二个模块必须使用该服务。知道了,还是看不到在另一个模块中添加css到应用程序的方法吧?
  • @Alan Bateman 你能给点提示吗?在 OSGi 中,我们可以传递包含包地址的 URI。 JPMS 有类似的吗?

标签: java javafx java-9 java-module javafx-9


【解决方案1】:

我在@AlanBateman 的帮助下找到了解决方案。

假设该 css 文件位于 com/foo/some-package/file.css 中,我在 module-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;

【讨论】:

    【解决方案2】:
    package org.apis.style.css;
    
    public class CommonCss {
    
        public static String getCommonCssStyle(){
           return CommonCss.class.getClassLoader().getResource("common.css").toExternalForm();
        }
    }
    

    将此包导出给所有人。

    在其他模块中我添加了这个

    getStylesheets().add(CommonCss.getCommonCssStyle());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-11
      相关资源
      最近更新 更多