代码之家  ›  专栏  ›  技术社区  ›  Jai

JavaFX:绑定到插入

  •  2
  • Jai  · 技术社区  · 8 年前

    我是JavaFX的新手,对绑定功能非常着迷。然而,我不知道如何绑定到节点的边距/填充。

    目前,我正在尝试创建一个左边有图像的文本框(或文本字段)。我制作了一个StackPane来环绕文本字段,以及该StackPanel的ImageView。然后,我尝试将ImageView的高度属性绑定到TextField的高度属性,但图像在视觉上看起来不像在TextField中,因为它与TextField边界重叠。

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

    它正在工作,但填充没有绑定的部分让我感到不安,因为这个值被计算为一个常量,它相当于我设置绑定时的填充。如果在绑定后再次更改填充,事情将变得混乱。

    这是一个 example 我想要实现的文本字段。

    有更好的方法吗?或者是一个更好的绑定方法,或者是一种完全不同的方法来创建与示例类似的UI。当前的方法并不优雅,因为我还设置了固定的左填充量,以便文本字段内容不会与图像重叠。

    1 回复  |  直到 8 年前
        1
  •  2
  •   DVarga    8 年前

    您可以使用创建自己的绑定 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 :

    如果其中一个已注册的依赖项无效,则 DoubleBinding被标记为无效。

    使用此绑定,如果 TextField 已更改,将重新评估绑定。