2016-04-22 70 views
0

所以,我一直在用JavaFX編程模擬時鐘,並且已經獲得了基本功能。現在,當我點擊一個自定義按鈕(用多邊形制成的三角形)時,我試圖添加一個下拉菜單。到目前爲止,它一切正常,除了當我嘗試在單擊按鈕之前或之後添加ContextMenu時,我的StackPane的背景爲白色。到目前爲止透明度一直很好。這是一些問題的圖片。JavaFX上下文菜單停止父級的透明背景

這是它應該是什麼樣子(你可以看到,因爲透明窗口的我的牆紙,因爲它應該是。) enter image description here

我按下了下拉菜單,背景改變按鈕後。 enter image description here

+0

ContextMenu是您使用的唯一Control類的子類嗎? (或者至少是你顯示的第一個控件?) –

+0

是的,這是第一個控件,謝謝你也試圖幫助!我被這一陣子困住了一陣子。 –

+0

查看我的答案,瞭解發生了什麼的完整解釋。 –

回答

1

JavaFX控件由CSS設計。第一次創建控件時,將加載默認的用戶代理樣式表(modena.css),並將其中定義的樣式應用於場景圖。其他JavaFX節點類(如形狀,圖像視圖和佈局窗格)不強制執行CSS加載(這是爲了增強不需要CSS的圖形密集型應用程序的性能)。

所以聽起來好像上下文菜單是您創建的第一個控件:當您創建並顯示它時,它會將默認CSS應用於場景。根窗格的默認背景顏色是非透明顏色,因此雖然您的SceneStage可能是透明的,但一旦應用了CSS,場景的內容就不會。

解決方法是爲根窗格指定透明度:

root.setStyle("-fx-background-color: transparent;"); 

或在外部樣式表的等價物。

0

回答我的問題,如果任何人想知道,似乎當文本菜單添加到現場,舞臺的initStyle(StageStyle.TRANSPARENT)被覆蓋,並顯示父母的顏色。由於我沒有爲根目錄初始化任何CSS樣式,它只是顯示爲白色。的解決將是:

//父佈局窗格

parent.setStyle( 「 - FX-背景色:RGBA(0,0,0,0.0)」);