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

Ben*_*ent 2 javafx stage

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

小智 7

抱歉,您一直在等待有关此问题的某种答案,以下内容主要面向将来希望找到实现此目标的方法的人。

首先让我说我不会考虑以下解决方案,而是更多的解决方法。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();
    }
}
Run Code Online (Sandbox Code Playgroud)