设置阶段图标

Posted

技术标签:

【中文标题】设置阶段图标【英文标题】:Setting stage icon 【发布时间】:2019-08-09 22:04:40 【问题描述】:

我的第一个意图是设置TextInputDialog 图标。但我是从设置舞台图标开始的。我看到几个 SO 问题的答案非常棒,通常包含 2 行代码。

首先我尝试将此图标放入 /resources/icons 但出现异常“无效的 URL 或找不到资源”。为了确保我在写入文件路径时不会出错,我将此图标移动到 /source/sample 目录。我使用代码(我将发布整个代码):

public void start(Stage stage) throws Exception 

    FXMLLoader loaderModyfikacjaKonfiguracji = new FXMLLoader(getClass().getResource("FXMLModyfikacjaKonfiguracji.fxml"));
    Parent root = loaderModyfikacjaKonfiguracji.load();
    stage.setTitle("Modyfikacja konfiguracji");
    Image image = new Image("file:icon.png");
    //stage.getIcons().removeAll();
    stage.getIcons().add(image);

    ControllerModyfikacjaKonfiguracji controllerModyfikacjaKonfiguracji = loaderModyfikacjaKonfiguracji.getController();

    stage.setScene(new Scene(root, 510, 700));
    stage.show();

在任何地方设置图标看起来都很简单。我也试过.jpg。不使用file: 会引发异常,使用file: 会编译,但我看不到更改图标的效果。我做错了什么或问题出在哪里?

【问题讨论】:

字符串必须包含资源的完整路径。如果没有方案,则路径被认为是相对于类路径的根目录。当图像位于“icons/icon.png”下时,您应该可以使用new Image("icons/icon.png")。如果是包而不是根目录,则在路径前加上“resources/”。 【参考方案1】:

我之前已经成功用这个设置了一个图标

primaryStage.getIcons().add(new Image(getClass().getResourceAsStream("AppIcon.png")));

在我的例子中,应用程序 fxml 文件和 AppIcon.png 位于同一目录中。

如果你不想走那条路,我建议你试试

 Image image = new Image("file:./icon.png");

但这是一个猜测。

【讨论】:

第一个解决方案有效。不幸的是,第二个没有。 ***.com/questions/10121991/javafx-application-icon "如果它被包装在一个包含的 jar 中,则需要使用以下方法:" stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("icon.png"))); 但我只是将此图标从另一个目录粘贴到 src 文件中。

以上是关于设置阶段图标的主要内容,如果未能解决你的问题,请参考以下文章

如何在我的应用程序的javafx 2.0中更改阶段标题栏上的图标[重复]

IP邮箱ICON图标收集实战

swift 验证失败时,在 UITextField 中自动显示错误图标

如何设置Marker图标的位置

将系统图标设置为项目图标

Qt设置系统托盘图标和程序图标