在 scenebuilder 17 中加载自定义组件

Load custom components in scenebuilder 17

我们正在开发 Javafx 项目,该项目在 Java8 上运行良好。最近,我们用 Java17 更新了项目。我们能够解决 IDEA 的问题。

好像在Java 9+之后都严格封装了类。要使用它,我们必须在 vm 选项中使用“export”“open”关键字或在编译运行时定义“ALL-UNNAMED”。

这是 运行 在 IDEA 上的完美表现。现在,我们正尝试在场景生成器中加载 fxml 文件,但场景生成器无法找到这些文件 类。我们已将所有必需的 jar 文件添加到 scenebuilder,但仍然无法加载 FXML 文件。

场景生成器显示以下错误:

java.lang.ClassNotFoundException: com.sun.javafx.scene.TreeShowingExpression

我们正在使用的库:

jfoenix.jar. fx_progress_circle.jar. fontawesomefx.jar

我们在 JFXCheckbox、JFXRadioButton、JFXSpinner 等的 JFX 视图上遇到问题

我们已经尝试了所有可能的解决方案,但无法解决。

如有任何帮助,我们将不胜感激。谢谢。

如评论中所述,当前使用最新版本的 jfoenix 和 SceneBuilder,即使您执行此 post 中的步骤:

JFXSpinner, JTextfield does not seems to work on scenebuilder version 17. There is probably more controls that are not working too.

如果您遵循这些步骤并发现明显的错误,那么您可能希望将这些错误报告给 jfoenix 团队。


正在导入 jfoenix 和 fontawesomefx 库:

  1. 单击 Scene Builder 库面板中的设置图标
  2. 选择JAR/FXML经理
  3. 选择搜索存储库
  4. 搜索 jfoenix 和 fontawesomefx
  5. 选择以下库:
    • com.jfoenix:jfoenix
    • de.jensd:fontawesomefx-fontawesome
  6. Scene Builder 将导入每个的最新 lib 版本:
    • com.jfoenix:jfoenix:9.0.10
    • de.jensd:fontawesomefx-fontawesome:4.7.0-9.1.2.
  7. 所有导入的新组件现在都可以在库管理器的自定义部分中选择。

progress circle thing 不在 Maven 中心,您需要通过“JAR/FXML 管理器”对话框的“从文件系统添加 Library/FXML”选项导入它(我没试过)。

jfoenix github page 说需要 9+ 才能使用 Java 9+。 我不认为 jfoenix 维护得很好(来自 Whosebug 上关于库的其他一些问题),它主要在最近的 SceneBuilder 构建中工作,但效果不佳,并且它的一些组件在 SceneBuilder 中表现不佳。

相关:

同样,fontawesomefx 的版本是 9.1.2,它有一个清单,其中包含一个自动模块 maven repo 条目,这使得它可以工作。我不知道该项目的 up-to-date 文档在哪里,但根据您要访问的字体库,您可以使用多个包,我只是选择了使用 fontawesome 图标库的包.

相关:

  • Unable to import certain classes in fontawesomefx after updating for Java 9 / Java 11

JavaFX 8 到 JavaFX 17 转换方法建议

我建议:

  1. 通过定义 module-info.java.
  2. 将项目更改为模块化项目
  3. 使用最新稳定版 Java 和 JavaFX (17.0.2)
  4. 使用最新的稳定版本的依赖库。
  5. 通过构建工具导入库:
    • 我会推荐 Maven,除非你真的懂 Gradle。
  6. 运行 没有任何用于导出和打开等 VM 选项的应用程序。
    • 在您的 module-info.
    • 中定义模块使用信息
  7. 确保您的应用在这些条件下正常运行(解决出现的任何问题)。
  8. 然后尝试将相同的库版本和您的 fxml 导入场景生成器。