首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >JavaFX项目结构

JavaFX项目结构
EN

Stack Overflow用户
提问于 2014-07-25 13:03:10
回答 1查看 23.3K关注 0票数 30

JavaFX的MVC模型通过使用FXML听起来很棒,但是我在寻找如何组织我的项目包时遇到了麻烦。

我发现的每一个关于JavaFX的教程都太简单,没有条理:他们只是创建一个包,然后在那里创建所有东西,每个控制器,每个fxml,每个css。我不想这样。我希望事情都在正确的地方。

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

让我们来看一个实际的例子:

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

另外,假设我想要在正确登录时切换场景。在FXML控制器正确的事件中,我必须调用一个"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 (easy access,FXML的目录在Main类下)。尽管如此,对于样式表来说,这必须由scene.getStylesheets().add(...);硬编码。我真的更喜欢在FXML中选择我的样式表。毕竟,样式表是View组件的一部分。在这种结构下,从FXML中的URL访问.css文件会有些困难,因为它位于它们的目录之上。

另外,有了这个组织,我如何才能有竞争力地改变场景?在这个项目中,这是不需要的,因为整个项目是一个单一的TabbedPane。Main调用它,然后就完成了。不需要更多的交换。但是一个简单的Log in场景(或者任何需要交换整个场景的原因)需要访问FXML路径。

然后是资源。Css文件可能需要使用图像。该结构通过将.css文件放在顶部并为.css可能需要的文件创建一个包来解决这个问题。但是,如果我想让一个特定的FXML有一个不同的.css,那么另一个问题就会出现。

这看起来像是一个循环。Css需要访问共享资源文件夹。FXML需要访问Css。FXML的控制器需要访问其他的FXML,我希望我已经清楚了我对项目结构的疑虑。请帮助我创建一个JavaFX项目结构,它对于一个比基本应用程序更强大的应用程序来说是足够强大的,或者将我重定向到一些好的源代码。

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

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24948397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档