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

如何使用Spring Boot FXVeawer在JavaFX阶段之间正确传输变量

闾丘才哲
2023-03-14

我试图在我的项目中使用依赖注入,这样我就可以在场景之间传输数据。例如,在一个控制器中,我得到了名为proj_idInteger字段。这是我在舞台上根据某种逻辑得出的。当我改变阶段时,我想通过新的阶段控制器来访问这个变量。新控制器具有相同的字段Integerproj_id

我用@Autowired标记了这些字段,但我不明白当控制器发生变化时Bean如何存储值。我用构造函数、getter和setter创建了实体Curr_proj,我假设它是存储变量的组件,但仍然不起作用。


共有2个答案

乌鸿宝
2023-03-14

好吧,我真的很感谢你的回答,但我的JavaFX知识并没有你想象的那么糟糕。我同意,我必须更加努力,我现在确实在学习Spring。

我做了一个小研究,在场景之间传输变量在我的情况下很容易,因为我使用FXVeawer,所以我的控制器已经是一个SpringComponents

因此,在我的FirstController中,我只需要在我的proj_ij字段中添加一个getter

public Integer proj_id;

public void SomeMethod() {
proj_id = 5;
}
Integer getProj_id() {
    return proj_id;
}

完成后,我刚刚在我的秒控制器公共FitstController FirstController和简单的构造函数注入中创建了一个字段:

@Autowired
public void get_projid(FirstController FirstController) {
    this.FirstController = FirstController;
}

现在,我可以通过键入FirstController来访问我的proj_id值。getProj_id在我的第二个控制器中

伍宝
2023-03-14

这不是一个具体的答案,只是一个没有重点的一般答案,可能有助于提供一个总体方向。也许我最终会把信息转移到其他地方。如果这个答案对你没有用处,请忽略它。

我的建议是:学习Spring。

Baeldung,spring.io和其他网站有巨大的资源,专门用于教Spring。利用它们。

遵循使用spring boot应用程序的现代实践。忽略任何不使用最新spring版本或不依赖xml配置的旧教程。

另外:学习JavaFX

Oracle、eden编码、makery和openjfx。io有很好的学习JavaFX的教程。

独立完成这两件事。然后独立开发您自己在这两种技术中的重要应用程序。

在您尝试集成JavaFX和Spring之前,请先这样做。JavaFX和Spring的交叉点拥有的高质量资源要少得多,这意味着您需要进行更多的研究、更努力地工作和开发,以完成集成。

只有在您对这两种技术都有了很好的工作知识(而不仅仅是基本的理解)之后,才能尝试开发使用这两种技术的另一个应用程序。

与其他Spring技术不同,目前,你不能仅仅使用Spring Initializer生成的应用程序来学习一些股票教程,并期望有一个集成Spring和JavaFX的有用的工作应用程序。

在我看来,集成并不太难,对于许多应用程序来说都是值得的,但我不建议在没有这两种技术(Spring和JavaFX)的全面经验的情况下构建集成应用程序,因为它们是如此不同,即使它们是互补的。

为了更具体地解决您的问题:遵循javafx mvc中的体系结构,但是在模型层使用spring服务和bean,并将它们注入控制器中。

如果您通过rest与服务器通信,请使用Spring rest客户端和数据搬迁对象。

如果您有本地数据库,请使用Spring数据。

实体类或数据传输对象可以构成mvc中模型的一部分,也可以为mvvm体系结构创建具有JavaFX属性的单独视图模型类。

有关与jpa基本集成的本地db应用程序,请参阅:

  • 在JavaFX中添加Spring依赖注入(JPA Repo,服务)

整体架构类似于这个eden SQLite JavaFX应用程序,即使那不是Spring。它演示了所涉及的组件。在Spring技术中替代,例如Spring数据、注入、Spring Boot应用程序等,以替代各种组件和布线。

总之,控制器中数据之间的交互通信被抽象为MVC或MVVM体系结构,该体系结构通过依赖注入使用spring服务和bean。不过,整个应用程序不仅仅是MVC,还具有其他组件和技术,例如:

>

  • 要管理的spring boot:

    • Spring应用程序生命周期
    • Spring组件配置
    • 读取app属性配置文件

    JavaFX应用程序类管理的JavaFX应用程序生命周期

    fxml控制器中的UI视图

    和任何一个

    >

    spring rest可以访问远程系统上的web服务。

    自动连接控制器时,请使用控制器bean的原型范围。有关更多信息,请参阅:

    • 在javafx中使用Spring boot会消耗大量内存吗

    目前JavaFX 17是模块化的,但Spring boot 2不是。这使得集成更加困难。

    对于许多开发人员来说,JavaFX和Spring的集成目前将超出他们作为开发人员的舒适区。

    未来的可能性

    在未来,spring boot 3将是模块化的。

    希望还可以在Spring Initializer中添加一个初学者依赖项,以便于生成新的JavaFX Spring项目。

    然后将其与Maven和gradle中良好的模块化和插件构建支持相结合,以便通过jlink和jpack打包模块化应用程序。

    还可以添加良好的IDE新项目向导支持,以使用这两个框架生成新项目。

    还为使用新技术的Spring和JavaFX集成提供了良好的教程。

    上述所有内容的结合有望使技术的集成和部署更容易获得。

  •  类似资料:
    • 我正在使用Netbeans 7.2和Scene Builder1.0开发一个JavaFX应用程序。我有我的主屏幕设置,我想有它,所以我点击一个按钮,它将关闭主窗口和打开另一个。主Stage对象位于main类中,但controller类是独立的,不能访问它,因为它不是静态的,并且位于不同的类中。我如何改变场景或舞台?

    • 问题内容: 我想以某种方式将在阶段A中读取的变量传递给阶段B。在某些示例中,我看到人们将其写入文件中,但是我认为这并不是一个很好的解决方案。我尝试将其写入环境变量,但是在此方面我并没有真正成功。如何正确设置? 为了使它正常工作,我尝试了很多事情,并读到我应该使用“””而不是“’‘来启动外壳程序并将这些变量转义为例如。 以下是我拥有的管道: 如您所见,我从阶段 Package中 读取的内容也需要在阶

    • 我尝试了几乎所有可用的解决方案,但似乎都不起作用我需要在两个Javafx场景之间传递,但当我单击以导航到下一个场景时,什么也没有发生。以下是我目前为止的代码:

    • 问题内容: 如何在声明式管道的各个阶段之间传递变量? 在脚本化管道中,我收集的过程是写入一个临时文件,然后将该文件读入一个变量。 如何在声明管道中执行此操作? 例如,我想基于shell动作创建的变量来触发其他作业的构建。 问题答案: 如果要使用文件(由于脚本是生成所需值的东西),则可以如下所示使用。如果没有,请使用如下所示的选项:

    • 问题内容: 我正在写一个简单的游戏并试图播放声音,但是当我创建它抛出的Media对象时我无法使它工作。我不是Java编码员,可以提供任何帮助。这是一个示例代码: 显然“ put.mp3”存在并位于正确的目录中,我使用以下方法检查了路径: 我在这里做错了什么? 问题答案: 问题是因为您试图在之外运行JavaFX场景图控件。 运行JavaFX应用程序线程内的所有JavaFX场景图节点。 您可以通过扩展

    • 大家好。我在生产中使用gitlab ci。我有很多舞台。1) 构建工件2)部署到外部服务器3)使用jfrog cli部署到工件 我在缓存maven本地存储库方面有问题。我的跑步者在第一步(构建)下载所有依赖项,并在最后一步(部署到Artifictory)执行相同操作。此外,我的跑步者在最后阶段之前删除m2文件夹中的所有数据: my gitlav ci yaml(无需第二步):