JavaFX项目结构
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaFX项目结构相关的知识,希望对你有一定的参考价值。
使用FXML的JavaFX的MVC模型听起来很棒,但我很难找到如何组织我的项目包。
我发现的关于JavaFX的每一个教程都过于简单和无组织:他们只需创建一个包并在那里创建所有内容,每个控制器,每个fxml,每个css。我不想那样。我希望事情能在正确的位置。
尽管如此,JavaFX的“路径”似乎......“有限”。使用URL使得如果我想将资源限制为本地文件,我必须完成整个getClass().getResource("foo.fxml").openStream()
的事情。这很好,但是通过从类路径获取资源,路径来自类所在的包。我有点想要项目的根。这会简化我的生活,但JavaFX似乎并没有像这样工作。
让我们来看一个实际的例子:
想象一下,我有一个FXML“登录屏幕”。想象一下,我希望登录屏幕使用样式表。理想情况下,该css将与该fxml位于同一个包中。但是,如果我想在另一个FXML中使用相同的.css呢?这是否意味着我必须将两个FXML放在同一个包中?显然我“不需要”,但我该怎么做呢?
另外,假设我想在正确登录时更改场景。在FXML Controller适当的事件中,我将不得不调用“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中选择样式表。 Afterall,stylesheet是View组件的一部分。从FXML中的URL访问.css文件对于这种结构来说会有点困难,因为它位于其目录之上。
此外,通过这个组织,我如何才能合理地改变场景?在这个项目中,这不是必需的,因为整个项目是一个TabbedPane。主叫它,它完成了。无需更多交换。但是一个简单的登录场景(或者为什么需要交换整个场景的原因)需要访问FXML路径。
然后是资源。 Css文件可能需要使用图像。该结构通过将.css文件放在顶部,并为.css可能需要的文件创建一个包来解决它。如果我想要一个特定的FXML有一个不同的.css,那么,另一个问题就会到来。
这似乎是一个循环。 Css需要访问共享资源文件夹。 FXML需要访问Css。 FXML的控制器需要访问其他FXML。我希望我清楚我的项目结构存在疑虑。请帮我创建一个JavaFX项目结构,该结构对于超过基本的应用程序来说足够强大,或者将我重定向到一些好的源代码。
哦,我顺便使用Netbeans。
恕我直言,你不应该根据你的意见创建包。
我对这种应用的态度
- 这些
controllers
的相应views
包 - 服务(业务)和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
上述实施可以考虑用于Maven
项目。
对于一个简单的项目,您可以查看structure here。这是一个maven项目!
以上是关于JavaFX项目结构的主要内容,如果未能解决你的问题,请参考以下文章