当前位置: 首页 > 知识库问答 >
问题:

JavaFX项目结构

孙修德
2023-03-14

JavaFX使用FXML的MVC模型听起来很棒,但我不知道如何组织我的项目包。

我找到的关于JavaFX的每一个教程都过于简单和无条理:它们只是创建一个包,然后在其中创建所有内容,每个控制器、每个fxml、每个CSS。我不想那样。我希望一切都在正确的地方。

尽管如此,JavaFX的“路径”似乎...“限制”。URL的使用使得如果我想将我的资源限制在本地文件中,我必须执行整个getClass().getResource(“foo.fxml”).OpenStream()操作。这很好,但是通过从类路径获取资源,该路径来自类所在的包。我想要这个项目的根。这将简化我的生活,但JavaFX似乎不是这样工作的。

假设我有一个FXML“登录屏幕”。假设我希望登录屏幕使用样式表。理想情况下,该css将位于该FXML的相同包中。但如果我想在另一个FXML中使用相同的.css怎么办?这是否意味着我必须将两个FXML放在同一个包中?显然我“不需要”,但我该怎么做呢?

另外,假设我想改变场景,当我登录正确。在FXML Controller Propose事件中,我必须调用“SetScene”。这个路径也很难获得,因为如果我在不同的包中有FXML。看起来要么所有东西都在一个庞大的包里,要么所有东西都很难访问,而不使用类似“../../dir”这样的黑客。

http://docs.oracle.com/javafx/2/best_practices/jfxpub-best_practices.htm中的Henley Sales应用程序似乎是一个组织良好的应用程序的例子,尽管该应用程序是一个TabPane。不幸的是(至少我认为)消息来源是不公开的。它的想法是这样的:

client
  Main.class
  styles.css
      client.images
          image.png
      client.screen1
          Screen1.fxml
          Screen1Controller.java
      client.screen2
          Screen2.fxml
          Screen2Controller.java
      ...

这似乎是一个坏的开始,但它有一些问题(或至少我认为它们是问题)。

对于'the Henley Sales'来说,有一个Main将其中一个包称为'FXML(易于访问,FXML的目录在Main类下面)是很明智的。但是,对于样式表,必须通过scene.getStylesheets().add(...);硬编码。我真的更愿意选择在FXML中选择我的样式表。毕竟,样式表是视图组件的一部分。使用这种结构从FXML中的URL访问.css文件会有些困难,因为它位于它们的目录之上。

还有,有了这样的组织,我如何才能胜任地改变场景?在这个项目中,这是不需要的,因为整个项目是一个TabbedPane。Main叫它,它就完成了。不需要更多的交换。但是一个简单的登录场景(或者需要交换整个场景的原因是什么)需要访问FXML路径。

哦,顺便说一下,我在用Netbeans。

共有1个答案

强志学
2023-03-14

IMHO,您不应该根据您的视图创建包。

我对这类申请的态度

>

  • 这些视图的相应控制的包
  • 服务(业务)层和dao(持久性)层的不同包(如果存在)
  • 图像、css等资源目录
  • 参考资料中的FXML文件目录view

    src/main
      ├──java
         ├── controllers
            ├──Screen1controller.java
            ├──Screen2controller.java
         ├── service
            ├──Service1.java
         ├── dao(persist)
            ├── SaveProducts.java
      ├──resources
         ├──view
            ├──screen1.fxml
            ├──screen2.fxml
         ├──css
            ├──style.css
         ├──images
            ├──img1.jpg
            ├──img2.jpg
    

  •  类似资料:
    • 当默认的项目结构不适用时,可以自定义配置。查看 Gradle 文档中 Java plugin 部分以了解如何在纯 Java 项目中进行配置。 Android plugin 使用了类似的语法,但因为 Android 有自己的 sourceSets,所以需要配置到 android 块中。下面的例子使用了旧的项目结构(Eclipse),并把 androidTest 的 sourceSet 映射到 tes

    • 上面提到的构建文件中有默认的文件夹结构。Gradle 遵循约定优先于配置的概念,在尽可能的情况下提供合理的默认配置参数。最基本的项目有两个 “source sets” 组件,分别存放应用代码及测试代码。它们分别位于: src/main/ src/androidTest/ 里面每个存在的文件夹对应相应的源组件。对于 Java plugin 和 Android plugin 来说,它们的 Java 代

    • 当涉及制作 electron 应用程序的问题时,项目结构会有些不同。如果你以前使用过官方的 vuejs-templates/webpack 设置,那么你对这个结构应该很熟悉。本文档在此章节将尝试解释样板代码的工作原理以及应用程序在构建中的一些区别。 单一的 package.json 设置 就在不久之前,两个 package.json 的设置是必需的,但是,感谢 @electron-userland

    • . ├── build/ # webpack 配置文件 │ └── ... ├── config/ │ ├── index.js # 项目核心配置 │ └── ... ├── src/ │ ├── main.js # 程序入口文件 │

    • 我将开始一个新的项目,并试图了解应用程序的最佳结构。让我拥有以下页面:、、、、和。而导航顺序是 还是这种结构更好: 注意:这只是一个简单的示例,我的应用程序更适合模块化结构:)

    • 通过 Dashboard,我们可以创建一个 Hello World 项目作为开始,创建之后的项目有特定的文件夹结构,我们将在这一节熟悉 Cocos Creator 项目的文件夹结构。 项目文件夹结构 初次创建并打开一个 Cocos Creator 项目后,开发者的项目文件夹将会包括以下结构: ProjectName(项目文件夹) ├──assets ├──library ├──local ├──p