2016-11-28 76 views
2

我是JavaFX的新手,對綁定功能很着迷。但是,我無法弄清楚如何綁定到節點的邊距/填充。JavaFX:綁定到插入

目前,我正在嘗試製作一個左側有圖像的文本框(或TextField)。我做了一個StackPane來包裝TextField,以及一個ImageView到那個StackPane。然後我嘗試將ImageView的height屬性綁定到TextField的height屬性,但圖像看起來不像TextField內部,因爲它與TextField的邊框重疊。

我最終修改了綁定來解釋TextField的填充。

imageView.fitHeightProperty().bind(textField.heightProperty().subtract(textField.getPadding().getTop() + textField.getPadding().getBottom())); 

這是工作,但該補白不綁定的部分是讓我感到不安,因爲這個值被計爲一個常數,相當於有任何填充當我設置的結合。如果綁定之後再次更改填充,事情將會變得不合時宜。

這是我想要實現的textfield的example

有沒有更好的方法來做到這一點?要麼是更好的綁定方法,要麼是完全不同的方法來製作類似於示例的UI。目前的方法並不優雅,因爲我還設置了固定數量的左填充,以便TextField內容不與圖像重疊。

回答

2

您可以創建自己的綁定使用Bindings.createDoubleBinding

imageView.fitHeightProperty().bind(Bindings.createDoubleBinding(() -> 
    textField.getHeight() - (textField.getPadding().getTop() + textField.getPadding().getBottom()) 
, textField.paddingProperty(), textField.heightProperty())); 

如果檢查方法簽名:

public static DoubleBinding createDoubleBinding(Callable<Double> func, Observable... dependencies) 

DoubleBinding的Javadoc:

如果一個人的註冊的依賴關係變爲無效,這是DoubleBindin的 g被標記爲無效。

如果已更改高度或填充的TextField,則綁定將被重新評估。

+0

謝謝,我已經學到了另一個關於綁定的很好的教訓:) – Jai