【问题标题】:JavaFX: Binding to insetsJavaFX:绑定到插图
【发布时间】:2017-04-11 20:54:38
【问题描述】:

我对 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()));

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

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

有没有更好的方法呢?要么是更好的绑定方法,要么是完全不同的方法来制作类似于示例的 UI。当前的方法并不优雅,因为我还设置了固定数量的左侧填充,以便 TextField 内容不会与图像重叠。

【问题讨论】:

    标签: java user-interface javafx data-binding javafx-bindings


    【解决方案1】:

    您可以使用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:

    如果注册的依赖项之一无效,则此 DoubleBinding 被标记为无效。

    如果使用此绑定,如果 TextField 的高度或填充已更改,则将重新评估绑定。

    【讨论】:

      猜你喜欢
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 2021-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多