2017-10-12 52 views
0

我需要從任務欄中刪除我的javafx應用程序。我試過StageStyle.UTILITY。這是行得通的,但我需要UNDECORATED和UTILITY舞臺風格或其他解決方案。 謝謝你的回覆。如何從任務欄中刪除我的javafx程序

+0

這似乎類似於位[是否有可能在JavaFX的透明實用階段?(https://stackoverflow.com/questions/27759019/is-it-possible-to-have-a -transparent-utility-stage-in-javafx/27763555#27763555),儘管這些問題的答案似乎都沒有做這個問題的要求(至少在OS X中,一個JavaFX圖標總是顯示在OS X dock中對我而言,我不知道如何阻止發生)。 – jewelsea

回答

1

對不起,您一直在等待這麼長時間的回答,以下主要針對未來希望找到實現此目標的方式的人。

讓我開始說我不會考慮以下解決方案,但更多的解決方法。 將一個以上的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(); 
    } 
} 
相關問題