如何从任务栏中删除我的javafx程序

时间:2017-10-12 14:32:33

标签: javafx stage

我需要从任务栏中删除我的javafx应用。我试过了StageStyle.UTILITY。这是有效的,但我需要UNDECORATED和UTILITY舞台风格或其他解决方案。 谢谢你的回复。

1 个答案:

答案 0 :(得分:3)

很抱歉,您已经等了很长时间才能得到某种答案,以下内容主要针对那些希望找到实现这一目标的人们。

首先我要说的是,我不会考虑以下解决方案,而是更多的解决方法。 不能将多个initStyle分配给某个阶段,但是将该应用程序隐藏在任务栏中,并将除了实用程序之外的initStyle分配给显示的阶段。

要实现这一点,必须创建两个阶段,即他们希望用户看到的阶段,以及另一个将被视为主阶段的父阶段且将为initStyle.UTILITY的阶段,这将阻止图标显示在任务栏中。

下面你可以看到修改了oracles文档的hello world示例,以允许没有图标的未修饰窗口(注意,如果想要实现透明/装饰窗口,他们可以通过更改mainStage的样式来实现)。

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import javafx.stage.StageStyle;


public class MultipleStageStyles extends Application {

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

    @Override
    public void start(Stage primaryStage) {
        primaryStage.initStyle(StageStyle.UTILITY);
        primaryStage.setOpacity(0);
        primaryStage.setHeight(0);
        primaryStage.setWidth(0);
        primaryStage.show();
        Stage mainStage = new Stage();
        mainStage.initOwner(primaryStage);
        mainStage.initStyle(StageStyle.UNDECORATED);
        Button btn = new Button();
        btn.setText("Say 'Hello World'");
        btn.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {
                System.out.println("Hello World!");
            }
        });
        StackPane root = new StackPane();
        root.getChildren().add(btn);
        mainStage.setScene(new Scene(root, 300, 250));
        mainStage.show();
    }
}