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

Posted

技术标签:

【中文标题】JavaFX。为标题栏和操作系统任务栏设置不同的图标【英文标题】:JavaFX. Set different icons for the title bar and the operating system task bar 【发布时间】:2014-12-08 02:55:02 【问题描述】:

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

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

我想为不同的图标大小使用不同的图像。类似于您在 .ico 文件中执行的操作。

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

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

【问题讨论】:

不要多次调用 stage.getIcons().add(),而是尝试一次设置所有图像。 stage.getIcons().addAll(Image1, Image2, Image3); 【参考方案1】:

有一种方法可以使用两个不同的阶段,但可能会出现问题(仅在 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,主舞台的图标化属性将不再起作用。因此,如果您单击 Windows 上的任务栏图标,您将无法在主舞台上对此事件做出反应,因此即使您希望将它最小化到任务栏, visibleStage 也会保持最大化。

以上是关于JavaFX。为标题栏和操作系统任务栏设置不同的图标的主要内容,如果未能解决你的问题,请参考以下文章

VB虚拟机怎么设置才能不让虚拟机的任务栏和主机的任务栏在同一地方

如何在 Windows 7 上删除 Java 程序的标题栏和任务栏图标?

如何设置小吃栏和浮动操作按钮之间的距离?

Javafx menuitem 白色边框

ubuntu没有像Windows那样有任务栏和开始菜单么

windows基本设置 Windows 系统的几个基本设置