我需要从任务栏中删除我的javafx应用。我试过了StageStyle.UTILITY
。这是有效的,但我需要UNDECORATED和UTILITY舞台风格或其他解决方案。
谢谢你的回复。
答案 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();
}
}