JavaFx隐藏任务栏图标

JavaFx 开发时,运行程序,任务栏默认会显示一个当前程序图标,如果配置了自定义图标,那显示的就是自定义的图标,如果没有设置,则默认显示java图标,例如下图中这种情况:

文章正文图片

隐藏图标-初步

有时候希望任务栏不显示当前程序的图标,这个在开发某些工具类应用时会有需要。为此,可以使用Stage 的 initStyle 方法并传入参数'StageStyle.UTILITY',这样,系统任务栏就不会显示运行的图标了。代码示例如下:

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception{
        Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
        // 初始化样式为 UTILITY
        primaryStage.initStyle(StageStyle.UTILITY);
        primaryStage.setTitle("Hello World");
        primaryStage.setScene(new Scene(root, 300, 275));
        primaryStage.show();
    }


    public static void main(String[] args) {
        launch(args);
    }
}

但随之而来的问题是,这样设置之后,图标是不显示了,但是标题栏变得很丑,因为不再显示图标,所以最大化最小化按钮也都没了,只有一个关闭的按钮。如图所示:

文章正文图片

隐藏图标+个性化定制

以上方法只是解决了图标隐藏的问题,而如果要定制化,还得微调一下代码。思路是:重新初始化一个Stage, 并设置其所属者(owner)为已经初始化为 utilityStyle 的Stage(即父级Stage)。这样再运行就不会显示图标了,并且新初始化的Stage可以自由定制样式。这样修改后效果如下:

文章正文图片

可以看到运行会显示两个窗口,要处理也很简单,只需要把父级Stage的透明度设置为0即可。代码示例如下:

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception{
        // 设置风格为 UTILITY
        primaryStage.initStyle(StageStyle.UTILITY);
        // 设置父级透明度为0
        primaryStage.setOpacity(0);

        Stage mainStage = new Stage();
        // 将 primaryStage 设置为归属对象,即父级窗口
        mainStage.initOwner(primaryStage);

        Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
        mainStage.setTitle("Hello World");
        mainStage.setScene(new Scene(root, 300, 275));

        // 先把 primaryStage 显示,再显示其他内容(顺序必须这样,因为父级必须显示,如果直接显示 mainStage, 则任务栏图标隐藏无效)
        primaryStage.show();
        mainStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

博主目前只知道这样的处理方法,不知道JavaFx 13会不会有新的简便的方法提供。

此外,需要注意,由于显示的窗口不是初始的窗口,所以关闭可见的Stage时,即需要退出程序时需要手动调用父级的close方法。否则只是关闭了显示的窗口。

如果您有什么好的方法和简介,欢迎在下方留言交流。

It's
欢迎访问本站,欢迎留言、分享、点赞。愿您阅读愉快!
*转载请注明出处,严禁非法转载。
https://www.devsong.org
QQ留言 邮箱留言
头像
引用:
取消回复
提交
涂鸦
涂鸦
热门