JavaFX:绑定到插图
JavaFX: Binding to insets
我是 JavaFX 的新手,对绑定功能着迷。但是,我不知道如何绑定到节点的 margin/padding。
目前,我正在尝试制作一个左侧有图像的文本框(或 TextField)。我制作了一个 StackPane 来环绕 TextField,并为该 StackPane 制作了一个 ImageView。然后我尝试将 ImageView 的高度 属性 绑定到 TextField 的高度 属性,但图像在视觉上看起来不像在 TextField 内部,因为它与 TextField 的边框重叠。
我最终修改了绑定以说明 TextField 的填充。
imageView.fitHeightProperty().bind(textField.heightProperty().subtract(textField.getPadding().getTop() + textField.getPadding().getBottom()));
它正在工作,但是填充未绑定的部分让我感到不安,因为这个值被视为一个常数,它等同于我设置绑定时它具有的任何填充。如果在绑定后再次更改填充,事情就会变得一团糟。
这是我想要实现的文本字段的 example。
有更好的方法吗?要么是更好的绑定方法,要么是完全不同的方法来使 UI 类似于示例。当前的方法并不优雅,因为我还设置了固定数量的左填充,以便 TextField 内容不会与图像重叠。
您可以使用 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:
If One of the registered dependencies becomes invalid, this
DoubleBinding is marked as invalid.
对于此绑定,如果 TextField
的高度或填充已更改,将重新评估绑定。
我是 JavaFX 的新手,对绑定功能着迷。但是,我不知道如何绑定到节点的 margin/padding。
目前,我正在尝试制作一个左侧有图像的文本框(或 TextField)。我制作了一个 StackPane 来环绕 TextField,并为该 StackPane 制作了一个 ImageView。然后我尝试将 ImageView 的高度 属性 绑定到 TextField 的高度 属性,但图像在视觉上看起来不像在 TextField 内部,因为它与 TextField 的边框重叠。
我最终修改了绑定以说明 TextField 的填充。
imageView.fitHeightProperty().bind(textField.heightProperty().subtract(textField.getPadding().getTop() + textField.getPadding().getBottom()));
它正在工作,但是填充未绑定的部分让我感到不安,因为这个值被视为一个常数,它等同于我设置绑定时它具有的任何填充。如果在绑定后再次更改填充,事情就会变得一团糟。
这是我想要实现的文本字段的 example。
有更好的方法吗?要么是更好的绑定方法,要么是完全不同的方法来使 UI 类似于示例。当前的方法并不优雅,因为我还设置了固定数量的左填充,以便 TextField 内容不会与图像重叠。
您可以使用 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:
If One of the registered dependencies becomes invalid, this DoubleBinding is marked as invalid.
对于此绑定,如果 TextField
的高度或填充已更改,将重新评估绑定。