对不起,您已经等待了这么久的某种答案,以下主要是为将来希望找到实现此目标的方法的人们提供的。
首先让我说我不会考虑以下解决方案,而是更多的解决方法。
将多个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();
}
}