JavaFX. 为标题栏和操作系统任务栏设置不同的图标。

16
在JavaFX中,是否有一种方法可以为标题栏和操作系统任务栏设置不同的应用程序图标?
问题在于,在系统任务栏中显示的图标比标题栏中的图标大得多,并且系统无法正确调整它们的大小。
我想为不同的图标尺寸使用不同的图片,就像在.ico文件中所做的那样。
如果我调用stage.getIcons().add(...)两次,前一个图像将始终用于两个栏。
我也无法将已经存在的支持不同尺寸的.ico文件用于此目的。

不要多次调用stage.getIcons().add(),尝试一次性设置所有图像。stage.getIcons().addAll(Image1, Image2, Image3); - Steve K
1个回答

3

有一种方法可以使用两个不同的阶段,但可能存在问题(仅在Windows 7上测试过)。以下示例使用Java 8/JavaFX 8。

此代码设置在JavaFX启动时接收到的主节点上显示在任务栏上的图标,但使其不可见(透明、零大小)。然后打开一个新的可见窗口,并使用不同的图标。

由于这只是子窗口而不是真正的窗口,因此隐藏事件必须委派给隐藏的阶段来关闭应用程序。可能还有更多事件需要委派,如最小化窗口。

public class Main extends Application {
    public static void main(String[] args) {
        Application.launch(args);
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        primaryStage.getIcons().add(getImage("taskbar_icon.png"));
        primaryStage.initStyle(StageStyle.TRANSPARENT);
        primaryStage.setWidth(0);
        primaryStage.setHeight(0);
        primaryStage.show();

        Stage visibleStage = new Stage();
        visibleStage.initOwner(primaryStage);
        visibleStage.getIcons().add(getImage("window_icon.png"));
        visibleStage.setScene(new Scene(...));
        visibleStage.setOnHidden(e -> Platform.runLater(primaryStage::hide));
        visibleStage.show();
    }
}

很不幸,如果将StageStyle设置为TRANSPARENT,则主舞台的iconified属性将不再起作用。因此,如果您在Windows上单击任务栏图标,则无法在主舞台上对此事件做出反应,因此可见舞台仍保持最大化状态,即使您希望它最小化到任务栏也不行。 - Chris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接