2013-04-30 79 views
1

嘗試找到Centering Text on a Button with Offset的解決方案後,我現在正在執行一個自定義組件。 我們的目標是製作一個按鈕式組件,其一側有一個圖標,中間文本則填充按鈕的其餘部分。所有孩子的設置狀態與父母相同

該組件包含兩個標籤/按鈕來顯示圖標和文本。他們都有一個背景圖片,在CSS中定義。

的CSS看起來像這樣爲圖標,並用交換圖像作爲背景的文本文本

#button-icon-cancel{ 
    -fx-font-family: "Arial"; 
    -fx-padding: 0,0,0,0; 
    -fx-background-color: transparent; 
    -fx-font-size: 28px; 
    -fx-graphic: url('images/button/cancel.png'); 
} 

#button-icon-cancel:pressed{ 
    -fx-graphic: url('images/button/cancel-pressed.png'); 
} 

的圖像由SETID()加載。目前,這兩個組件在傳遞到舞臺之前都會添加到Panel中。它們包含一個用於處理的OnClickEvent。

我們的實際問題

我怎樣才能做到這一點,如果單擊一個組件,另一種是獲取:從CSS壓制呢?

  • 添加ClickEvent該小組正在做什麼(無論是標籤/按鈕就點擊)
  • 添加他們都到HBox中,添加事件和hbox的工作,在這方面,我可以點擊組件和事件被觸發,但是:按下的狀態僅適用於您單擊的組件。

是否有可能給所有孩子的通知,他們應該表現得像他們被按下?由於我們有很多小圖標,但只有一個文本背景,因此在整個事物上放置一個Label會造成很多不必要的浪費圖像空間。如果不是所有的css一次被改變,這也會導致改變字體顏色的問題(由於標籤沒有注意到按鈕被按下,帶有.setMouseTransparent(true)的標籤按鈕解決方案不會改變文本標籤的字體顏色)

回答

0

首先,JFX-8將支持更廣泛的css改進,這將使您更容易解決問題。

爲了解決你的問題,我可以建議如下:每個節點都有一個按下的屬性。你可以在這個屬性上添加一個監聽器,當它更改爲true時,可以在需要的節點上使用setStyle(String)方法,並使用setStyle(null |「」)更改爲false。