gpt4 book ai didi

小型/中型/大型桌面应用程序的 JavaFX 最佳实践指南?

转载 作者:行者123 更新时间:2023-12-02 02:53:14 27 4
gpt4 key购买 nike

我正在一个开发多窗口桌面应用程序的项目中学习JavaFX + FXML。稍后的目标是这些窗口之间的一些依赖关系(gui 1 中的更改刷新了 gui 2、gui x ...)。

现在我想知道经验丰富的 javafx 开发人员如何构建他们的项目?
他们如何使用多窗口?
他们如何打开并重新初始化已经打开的窗口?
他们如何在所有类别中处理这个问题?
他们如何处理数据库连接/sql调用?

我正在尝试使用某种 MVC 模式进行开发,为每个窗口使用一个包:

ModelWindowname.java      -- Model
Windowname.fxml -- View
Windowname.css --
ControllerWindowname.java -- Controller

然后我在寻找从不同类初始化窗口的方法时遇到了一些麻烦。我可以通过创建自定义加载程序对象并创建我自己的初始化方法(下面的示例)来解决这个问题。

@FXML
void openGuiOne(ActionEvent event) throws IOException {
/*
* We don't put the FXMLLoader into try/catch blocks, so we throw the IOException.
* Why? The user has no impact on what's going on here, so we can avoid the
* overload on code and trace-information.
*/
Stage oStage = null;
Parent oScene = null;

// Check if the stage is already opened
if (StageHandler.stageAlreadyOpened("gui_one") == false) {
// if not, open a new window based on the One.fxml design and set some properties
oScene = FXMLLoader.load(getClass().getResource("/com/mytool/one/One.fxml")); // requires to throw IOException
oStage = new Stage();
oStage.setScene(new Scene(oScene));
oStage.setTitle("One");
oStage.setResizable(false);
oStage.setX(475.0); // Set x-position of the window on startup
oStage.setY(410.0); // Set y-position of the window on startup
oStage.show();

// Look into StageHandler-Class for detailed information about the class
StageHandler.addStage("gui_one", oStage);

// EventHandler - close only this window if it's closed
oStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
@Override
public void handle(WindowEvent event) {
StageHandler.delStage("gui_one");
}
});
} else {
// if window is already opened, pull it to the foreground
StageHandler.getStage("gui_one").toFront();
}
}

如果我想从另一个 gui 上的按钮打开 gui_one,然后是主 gui,我该怎么做?这就是我现在正在做的:

@FXML
void openGuiOne(ActionEvent event) throws IOException, SQLException {
/*
* We don't put the FXMLLoader into try/catch blocks, so we throw the IOException.
* Why? The user has no impact on what's going on here, so we can avoid the
* overload on code and trace-information.
*/
Stage oStage = null;
FXMLLoader oLoaderOne = new FXMLLoader(getClass().getResource("/com/mytool/one/One.fxml"));

// Check if the stage is already opened
if (StageHandler.stageAlreadyOpened("gui_one") == false) {
// if not, open a new window based on the One.fxml design and set some properties
oStage = new Stage();
oStage.setScene(new Scene(oLoaderOne.load()));
ControllerOne oControllerOne = oLoaderOne.getController();
oStage.setTitle("One");
oStage.setResizable(false);
oStage.setX(475.0); // Set x-position of the window on startup
oStage.setY(50.0); // Set y-position of the window on startup

oControllerOne.myInitialize("");

oStage.show();

// Look into StageHandler-Class for detailed information about the class
StageHandler.addStage("gui_one", oStage);

// EventHandler - close only this window if it's closed
oStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
@Override
public void handle(WindowEvent event) {
StageHandler.delStage("gui_one");
}
});
} else {
// if window is already opened, pull it to the foreground
StageHandler.getStage("gui_one").toFront();
}
}

但是我是否总是需要在每个 Controller 上为我能够打开的每个 GUI 复制大量代码行?好吧,由于我必须在多个地方更改它,所以我什至不会考虑它。但现在我不知道如何处理这个问题。我相信我对 oop 没问题,我只是从未使用 oop 创建过桌面应用程序。

到目前为止,我对这些问题研究的印象是:几乎每一个答案都是“这是唯一的出路”,但每个答案都是不同的。

我找到了这篇文章[ http://docs.oracle.com/javafx/2/best_practices/jfxpub-best_practices.htm]但不幸的是我找不到其他任何(可信的)东西。javafx上有小型/中型/大型专业开源项目吗?我的第一次尝试是了解开源项目以及大型项目的结构……我还找不到桌面应用程序。或者有谁知道我完全错过的最佳实践指南,并且它被更多的人遵循?

致以诚挚的问候。

最佳答案

你应该做的第一件事就是不要像这里的很多人一样尝试重新发明轮子。查看 JavaFX 的现有应用程序框架之一,例如MVVMFX https://github.com/sialcasa/mvvmFX/wiki这样的应用程序框架将为您的项目提供坚实的结构,您可以在其上进行构建。

关于小型/中型/大型桌面应用程序的 JavaFX 最佳实践指南?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43488789/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com