JavaFX.为标题栏和操作系统任务栏设置不同的图标
在 JavaFX 中,有没有办法为标题栏和操作系统任务栏设置不同的应用程序图标?
问题是,与标题栏中显示的图标相比,系统任务栏中显示的图标要大得多,并且系统无法正确调整它们的大小。
我想为不同的图标大小使用不同的图像。类似于您在.ico文件中执行的操作。
如果我调用两次,则前一个图像将始终用于两个柱。stage.getIcons().add(...)
为此,我也无法使用已经存在的.ico文件(支持不同大小)。
在 JavaFX 中,有没有办法为标题栏和操作系统任务栏设置不同的应用程序图标?
问题是,与标题栏中显示的图标相比,系统任务栏中显示的图标要大得多,并且系统无法正确调整它们的大小。
我想为不同的图标大小使用不同的图像。类似于您在.ico文件中执行的操作。
如果我调用两次,则前一个图像将始终用于两个柱。stage.getIcons().add(...)
为此,我也无法使用已经存在的.ico文件(支持不同大小)。
有一种方法可以使用两个不同的阶段,但它可能有问题(仅在Windows 7上测试)。下面的示例使用 Java 8/JavaFX 8。
此代码设置在 JavaFX 启动时接收的主阶段的任务栏上显示的图标,但使该阶段不可见(透明,零大小)。然后,它会打开一个带有不同图标的新的可见窗口。
由于这只是一个子窗口,而不是真正的窗口,因此必须将 hide 事件委托给隐藏阶段以关闭应用程序。可能还有更多必须委派的事件,例如最小化窗口。
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();
}
}