【问题标题】:JavaFx Do something on first load [duplicate]JavaFx在第一次加载时做一些事情[重复]
【发布时间】:2017-01-20 02:00:21
【问题描述】:

我想在用户第一次启动软件时弹出一个窗口来选择文件位置。我是javafx的新手,我在网上寻找答案但没有成功...... 提前致谢

【问题讨论】:

  • 你看过JavaFXFileChooser吗?
  • 我知道 FileChooser。问题不在于创建 UI 来获取文件,而是如何在第一次加载时运行某些东西。前任。询问用户是否要选择文件或使用默认位置的警报....
  • JavaFX Application 有一个 init()start() 方法,您可以在其中一个 init() 中完成您需要的工作,用于非 UI 工作,start() 用于 UI工作(例如显示 FileChooser、Alert 或主舞台)。似乎直截了当且显而易见,所以我想我误解了您的问题。也许 Jai 理解得更好,并创造了适当的答案。

标签: java javafx javafx-8 executable-jar


【解决方案1】:

我想我找到了。

primaryStage.setOnShowing(event -> {
    //Code here
});

它在第一次启动时执行操作。我不知道这是否是最好的方法,但我就是这样做的。我已经有一个大约 3 行的文件。我刚刚添加了第 4 个带有随机单词的单词,当用户启动应用程序时,它会检查文件中是否存在该单词。如果是这样,它什么也不做。如果没有,它会要求用户选择文件夹,如果选择成功,它会写单词。

【讨论】:

    【解决方案2】:

    首先,我想指出您的措辞可能不够清晰,以至于大多数人无法准确理解您的需求。我将假设您有某种设置(如默认应用程序存储目录),您需要用户在第一次运行 JAR 时指定这些设置。如果 JAR 文件随后运行,它不应再次提示,并使用之前指定的设置。

    通常,当用户运行 JAR 文件时,所有数据都将在该会话中隔离。如果用户关闭应用程序并再次打开应用程序,它的行为将与上一次运行一样。

    如果需要持久化这些数据或设置,可以使用Properties。这会将数据保存在单独的文件中。通常的约定是将其保存在与 JAR 文件相同的文件夹中,并命名为config.properties

    在应用程序启动时,应检查该文件是否存在,如果不存在,则表示这是第一次运行。随后,当用户设置数据(例如文件夹)时,您会将其保存到文件中。

    你可以找到一个例子here

    【讨论】:

    • 对不起,我是法国人,我尽力表达了它......但我照你说的做了,现在很好。谢谢
    【解决方案3】:

    背景

    为了实现文件选择器,我们可以使用 JavaFXFileChooser。这将打开一个窗口,让我们有机会选择一个文件。

    您要求的是在进入实际应用程序之前打开FileChooser。让我们看看类似的实现!

    实施

    首先,我们需要一个 JavaFX Application 类,如果我们要从中创建一个新实例,它将打开一个窗口:

    public class App extends Application
    {
        private final File file;
    
        public App(File file)
        {
            this.file = file;
    
            // Optionally provide ‘launch’ with some arguments
            Application.launch();
        }
    
        @Override
        public void start(final Stage stage)
        {
            // ...
    
            stage.setScene(new Scene(insertNodeHere));
        }
    }
    

    我相信你已经知道了——这样的课程会打开一个新窗口。这是我们在 main 类中使用 FileChooser 检索到 File 后将调用的单独应用程序类。

    在我们的 main 类中,我们会这样写:

    File file = fileChooser.showOpenDialog(stage);
    
    if (file != null)
        new App(file);
    

    如果所选文件不是null,这将启动您的应用程序。

    此外

    考虑到上述实现,您可以随心所欲地将事情复杂化。也许您希望即使文件为空也能启动应用程序?在这种情况下,不需要if 语句。

    【讨论】:

    • 在启动 JavaFX 应用程序并初始化 JavaFX 应用程序(即调用应用程序的 start() 方法时)之前,您不应显示 FileChooser。您不应该在构造函数中启动应用程序,因为这会创建应用程序对象的新实例(除了由构造函数创建的实例之外),这非常令人困惑。
    猜你喜欢
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多