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

标签 java javafx icons javafx-8 ico

在 JavaFX 中有没有办法为标题栏和操作系统任务栏设置不同的应用程序图标?

问题是系统任务栏中显示的图标比标题栏中的图标大得多,系统无法正确调整它们的大小。

我想为不同的图标大小使用不同的图像。与您在 .ico 文件中所做的类似。

如果我调用 stage.getIcons().add(...) 两次,前一个图像将始终用于两个条。

我也无法为此目的使用现有的 .ico 文件(支持不同大小)。

最佳答案

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

此代码设置在 JavaFX 启动时收到的主要阶段的任务栏上显示的图标,但使该阶段不可见(透明,零大小)。然后它会打开一个带有不同图标的新可见窗口。

由于这只是一个子窗口而不是真实窗口,隐藏事件必须委托(delegate)给隐藏阶段以关闭应用程序。可能需要委托(delegate)更多事件,例如最小化窗口。

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();
    }
}

关于JavaFX。为标题栏和操作系统任务栏设置不同的图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26341744/

相关文章:

java - 如何从 OSGi 组件中的第三方 jar 文件导入类

java - 如何修复UnsatisfiedLinkError?

java - JPanel 或 JLabel 似乎正在为每个对象创建两个标签而不是一个标签?

windows - 适用于 Windows 8 安装程序的适当图标

编辑树单元格时,Java JTree 自定义图标更改回默认图标

java - 如何在 android 中使用 ShapeDrawable 以编程方式创建圆角边框?

java - 进程被终止后 R.java 中的 Android NoSuchField 错误

java - 使用 Platform.exit() 终止 JavaFX 应用程序

java - 如何在Java中使用非标准采样因子缩放JPEG图像?

java - 在 JavaFX 中调用 swing 软件的 main 函数将终止 JavaFX 软件