2015-04-22 135 views
0

我已經開始學習Javafx,並且發生了這種「奇怪」的功能。我用兩個按鈕製作了一個簡單的窗口。當我按下其中一個時,出現一個藍色筆畫並保持在那裏直到我按下另一個按鈕。除了知道最後按下哪個按鈕之外,我找不到合理的用途。即使從用戶體驗的角度來看,這也沒有意義。我嘗試了某種方式來「停用」它通過CSS,但沒有運氣。有沒有解決方案?Javafx按鈕保持「啓用」狀態

+0

在沒有看到代碼,沒有 – Reimeus

+0

你可以添加你所編寫的代碼? – ItachiUchiha

回答

1

很難告訴你在沒有代碼的情況下搜索什麼。 但我想你是指當前集中菜單項目的可視標記。此功能用於用戶點擊「Tab」鍵以瀏覽菜單項的情況。

您可以通過在「屬性」選項卡中取消選中「Focus Traversable」選項來禁用該功能。這也將禁用標籤導航!

已經有一個線程完全針對此主題提供解決方案。請參閱:Remove Focus Box Around TextField

它談論禁止使用CSS的焦點顏色,而通過使用該CSS樣式規則保持標籤導航功能:

-fx-focus-color: transparent; 

(來源:Uluk BIY的鏈接話題的答案)

1

JavaFX中圍繞控件的藍色輪廓表示哪個控件具有焦點。

焦點指標是在不同的UI框架中使用的常用慣用法,並非只針對JavaFX。在傳統的基於鼠標/鍵盤的輸入設置中,需要指示按下按鍵時將發送按鍵的位置。想象一下,表單上有多個字段,幾個文本字段和幾個按鈕。如果用戶鍵入一些字符 - 系統如何知道在哪個文本字段中插入字符?同樣,如果用戶按下返回來激活按鈕,哪個按鈕將被激活?答案是,當前擁有焦點的按鈕或字段將接收輸入。通常可以通過按Tab鍵將選項卡改爲新的字段或使用鼠標按下不同的字段來改變焦點。但是,即使系統知道哪個字段具有焦點,向用戶提供反饋以讓用戶知道哪個字段具有焦點也很重要。這樣,當用戶輸入時,他們就會知道輸入的位置。

您在JavaFX中的按鈕周圍看到的藍色輪廓是一個視覺指示器,指出該按鈕具有焦點,並且如果按空間,該按鈕的動作將被觸發,而不是其他按鈕。當您在另一個按鈕上單擊鼠標時,它將同時觸發另一個按鈕的操作並將焦點轉移到該按鈕,所以如果您隨後按下空格鍵,最後一次單擊的按鈕將再次啓動。

JavaFX中使用JavaFX 8附帶的默認modena.css樣式表的控件的焦點顏色可以由一些css屬性控制,您可以在用戶樣式表中爲應用程序覆蓋(通過定義在.root {} CSS樣式類的屬性:

.root { 
    -fx-focus-color: transparent; 
    -fx-faint-focus-color: transparent; 
} 

但是,刪除焦點顏色指標可能會:

/* A bright blue for the focus indicator of objects. Typically used as the 
* first color in -fx-background-color for the "focused" pseudo-class. Also 
* typically used with insets of -1.4 to provide a glowing effect. 
*/ 
-fx-focus-color: #039ED3; 
-fx-faint-focus-color: #039ED322; 

所以,舉例來說,你可以刪除所有使用集中的顏色從您的應用程序使您的應用程序更不直觀,更難理解。

讓我們來看一個簡單的形式,JavaFX的:

form

各地的用戶名文本輸入字段的藍色環表示文本輸入將進入這一領域。

有沒有正確的方法來禁用只從我的項目的按鈕對焦環?

如果你想只爲按鈕和一個項目,也不會影響其他控件的所有按鈕禁用焦點反饋,那麼你可以定義一個樣式規則:

.button { 
    -fx-focus-color: transparent; 
    -fx-faint-focus-color: transparent; 
} 

注:即使您使用的其他框架不提供按鈕的對焦環,我仍然不建議這樣做。

這將覆蓋默認JavaFX 8 modena.css樣式表中定義的按鈕的默認焦點顏色。您不需要(也不應該)修改modena.css樣式表來覆蓋它中的值。您可以在應用程序的樣式表中使用更具體的CSS選擇器規則重新定義值。如果您需要了解CSS選擇器如何工作,則可以在網上搜索和閱讀大量資源。 Oracle提供getting started tutorial關於如何爲場景設置自定義CSS樣式。相關的代碼行是你的用戶樣式表添加到您的場景:

scene.getStylesheets().add(
    MyApplication.class.getResource(
     "my-stylesheet.css" 
    ).toExternalForm() 
); 
+0

我完全理解聚焦環對文本輸入字段或當您按Tab鍵時的必要性。但是在按鈕上,當你用鼠標按下時,我認爲這是沒有必要的。例如,在WPF應用程序中,這不會發生。沒有任何焦點。另外,從其他線程的答案中,他們說你改變了modena.css文件。但是,如果你這樣做,你禁用所有控件的對焦環,我不想(僅從按鈕)。另外,他們說你可以創建一個CSS類並將它應用到你的按鈕上,但我覺得這很費時間。 @codingquicktips – paul

+0

有沒有正確的方法來禁用只從我的項目按鈕的對焦環? – paul

+1

如果你點擊一個按鈕,那個按鈕就會有焦點,並保留它。如果您然後按下相應的按鍵激活按鈕(大多數系統上的空間),然後再次按下按鈕。對於用戶而言,如果沒有指出按下空格鍵會導致與正在執行的按鈕相關聯的操作的事實,那將是一個非常糟糕的用戶體驗。如果你真的想把它關掉(你*真的*,***真的不這樣做),你可以通過重寫'.button:focused'規則在CSS中這樣做。 –