我試圖創建一個沒有出現在Windows任務欄上並且未修飾的階段(沒有邊框,也沒有關閉/最小化/最大化按鈕)。我的最終目標是創建一個將彈出通知窗口的托盤圖標應用程序。JavaFX:你能創建一個不顯示在任務欄上並且未修飾的舞臺嗎?
它與此question類似,我希望StageStyle.UTILITY(防止任務欄上顯示舞臺)和StageStyle.TRANSPARENT(它是完全未修飾的窗口)的行爲。
引用的問題對我來說不起作用,因爲我沒有從中創建模態窗口的父級。任何想法如何讓這個工作?由於
我試圖創建一個沒有出現在Windows任務欄上並且未修飾的階段(沒有邊框,也沒有關閉/最小化/最大化按鈕)。我的最終目標是創建一個將彈出通知窗口的托盤圖標應用程序。JavaFX:你能創建一個不顯示在任務欄上並且未修飾的舞臺嗎?
它與此question類似,我希望StageStyle.UTILITY(防止任務欄上顯示舞臺)和StageStyle.TRANSPARENT(它是完全未修飾的窗口)的行爲。
引用的問題對我來說不起作用,因爲我沒有從中創建模態窗口的父級。任何想法如何讓這個工作?由於
我能夠解決此問題與下面的代碼:
Stage stage = new Stage();
stage.initStyle(StageStyle.UTILITY);
stage.setMaxHeight(0);
stage.setMaxWidth(0);
stage.setX(Double.MAX_VALUE);
StageStyle。實用程序將避免創建任務欄圖標。我將寬度和高度設置爲0,使窗口變小,然後使用stage.setX(Double.MAX_VALUE)將它放在遠離屏幕的位置,以使其不顯示。這有點麻煩,但它似乎工作正常。
JavaFX的不支持該功能,您請求
只使用核心Java 8類你不能做你的要求(不顯示未修飾的或透明的階段任務欄圖標)。
如果您願意,請在JavaFX issue tracker中爲此提出功能請求。
您可以編寫一些本機JNI code,並告訴Windows不要爲您的應用程序顯示任務欄圖標。我不知道你會怎麼做。
建議在任務欄圖標
我認爲這是相當標準的窗口工具包的行爲,顯示在任務欄中的應用程序主窗口時不隱藏在主應用程序窗口,所以我建議不要試圖規避這種標準行爲。
建議的通知和托盤圖標
這是不直接關係到你的問題的標題,但只是在執行任務的最終目標發表評論 - 通知托盤圖標。
當與托盤圖標關聯的窗口被隱藏時,我所看到的大多數托盤應用程序都沒有任務欄圖標,但是當顯示與托盤圖標關聯的窗口時,確實有任務欄圖標 - 所以我建議你堅持使用該設置。
另外,通知是系統托盤圖標基礎結構本身的標準部分,所以我建議您使用系統托盤圖標通知的標準機制,而不是使用自己的標準機制。這也將允許用戶配置托盤圖標及其通知是否使用標準OS托盤圖標和通知管理UI顯示。
我創建了一個sample application,它使用AWT SystemTray API爲JavaFX應用程序提供系統托盤,該應用程序使用本節中的部分建議。如果你喜歡,你可以試試看。
當實現RT-17503 Provide system tray support時,系統托盤支持將提供給JavaFX(可能使用Java 9)。
JavaFX DOES支持。
不要把main()方法放在你的Application類中。只要創建另一個類是主類:
public class FxApplication extends Application {
}
public class Main {
public static void main(String[] args) {
PlatformImpl.setTaskbarApplication(false);
Application.launch(FxApplication.class, args);
}
}
在Win7上它仍然顯示在任務欄中。另外,setTaskbarApplication()不是API。所以對於Java 9來說,這個代碼無論如何都不起作用。 – Roland
這個問題是不是真新鮮,但我有同樣的問題,並沒有發現解決方案在第一,但這裏是我的解決辦法:)
最好我找到的解決方案是將primaryStage設置爲樣式實用程序,並將所有childStages設置爲Style Undecorated。然後primaryStage的不透明度設置爲0.0,以便其不可見: PrimaryStage:
primaryStage.initStyle(StageStyle.UTILITY);
primaryStage.setOpacity(0);
primaryStage.show();
柴爾茲:
this.initOwner(owner);
this.initStyle(StageStyle.UNDECORATED);
我嘗試使用initStyle(StageStyle.UTILITY)被證明的階段之後,它不可能。任何想法如何做到這一點? (起初我需要屏幕和任務欄中的舞臺,但是我希望它可以在視覺上顯示出來)。 – theexplorer
@theexplorer根據[文檔](http://docs.oracle.com/javase/8/javafx/api/javafx/stage/Stage.html#initStyle-javafx.stage.StageStyle-),必須先調用initStyle舞臺是可見的。不知道是否有辦法解決它。 – dejuknow