问题标签 [javafx-bindings]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
8656 浏览

java - 如何将值绑定到 ObservableList 的大小?

我想将一个值绑定到ObservableList的大小以知道它的大小并知道它是否有多个值

0 投票
1 回答
172 浏览

java - How to get BooleanBinding from comparing 2 DatePickers?

I have two DatePickers and one Button on the GUI. I need to disable the button whenever the first datePicker has a date that is NOT before the second datePicker's date. i.e. before is false in the following snippet:

using Bindings APIs.


Here is my working solution, but I believe there is a better API to handle such situation:

0 投票
1 回答
643 浏览

java - JavaFX:绑定到插图

我对 JavaFX 很陌生,并且对绑定功能很着迷。但是,我无法弄清楚如何绑定到节点的边距/填充。

目前,我正在尝试制作一个左侧有图像的文本框(或 TextField)。我做了一个 StackPane 来环绕 TextField,以及一个 ImageView 到那个 StackPane。然后我尝试将 ImageView 的 height 属性绑定到 TextField 的 height 属性,但图像在视觉上看起来不像在 TextField 内,因为它与 TextField 的边框重叠。

我最终修改了绑定以考虑 TextField 的填充。

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

这是我想要实现的文本字段的示例。

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

0 投票
1 回答
852 浏览

javafx - JavaFX:双向绑定的初始值

当我对这两个属性进行绑定时会发生什么?

如果两个属性都应该持有相同的对象引用,那么在此绑定之后,两个属性是否都持有ObjectAor的引用ObjectB

0 投票
0 回答
71 浏览

java - 反向选择绑定 - 可能吗?

我有一个案例要求对象属性的子属性自动绑定到某个已定义的属性,但在父属性的任何更改上取消绑定旧的并重新绑定新的;即反向选择绑定

仅用于说明(我的情况不同,但在这里解释太复杂)说我有一个标签,您可以更改为不同的大小/颜色/字体等,但文本应保持不变:

当然这是非法的,因为绑定只能在属性上。

除了显式监听更改之外,是否有开箱即用的解决方案?

0 投票
2 回答
2602 浏览

java - 绑定到 ObservableValue而不是带有 EasyBind 的 ObservableList

我有一个包含ModelItem项目的主/详细信息面板。每个ModelItem都有一个ListProperty<ModelItemDetail>,每个ModelItemDetail都有几个StringPropertys。

在详细信息面板中,我想展示一个Label将其文本绑定到并派生自ModelItemDetail当前选定的每个属性的文本ModelItem。最终值可能取决于其他外部属性,例如CheckBox在“详细信息”面板上选择了 a(即,如果选择了复选框,则 的值bProperty不包含在结果中)。

这个绑定完成了我想要的,使用Bindings.createStringBinding()

例如:

我最近发现了 EasyBind,我正在尝试用它替换一些 API 绑定。我找不到用 EasyBind 表达这种绑定的方法。显然,我的代码的主要问题是因为 selectedItem 是一个属性,所以我不能将其详细信息用作ObservableList,我必须坚持使用ObservableValue<ObservableList>>. 这不方便通过EasyBind.map(ObservableList)和链接转换EasyBind.combine(ObservableList),这似乎是实现此绑定的理想候选者。在某些时候,我考虑过创建一个本地 ListProperty 并通过 selectedItem 上的侦听器将其绑定到 selectedItem 的详细信息,但它看起来太冗长和不干净。

我试过像这样强制 EasyBind API:

但是我感觉最后一个getOrElse只是在初始化时被调用,并且在更改时不会更新selectedItem

我也尝试过ObservableList立即获得,但不能指望任何其他空列表:

我什至尝试使用EasyBind.subscribe来监听 selectedItem 的更改并重新绑定(对此不太确定,但我认为不需要重新绑定,一切都可以执行计算):

这部分有效,实际上它正在监听复选框更改,但奇怪的是只监听第一个更改。我不知道为什么(知道会很好)。如果我添加另一个 EasyBind.Subscribe订阅 checkbox.selectedProperty,它会按预期工作,但这也太冗长和不干净。如果我自己将 API 侦听器添加到 selectedItemProperty 并在那里执行绑定,也会发生同样的情况。

我使用 EasyBind 来表达这种绑定的动机正是摆脱了显式表达绑定依赖关系的需要,并尝试进一步简化它。我提出的所有方法都明显比 API 差,尽管我对它并不完全满意。

我对 JavaFX 还是很陌生,我正在努力解决这个问题。我想了解正在发生的事情,并找出是否有一种简洁而优雅的方式来表达这个使用 EasyBind 的绑定。我开始怀疑 EasyBind 是否没有为这个用例做好准备(顺便说一句,我认为这并不罕见)。不过,可能我错过了一些微不足道的东西。

这是一个 MVCE,显示了我尝试过的一些方法,并且 API 绑定按预期工作:

更新:我取得了一些进展。

以下代码工作正常,但神秘地仍然只听 CheckBox 上的第一个更改:

显然,我遇到麻烦的主要原因是因为我没有看到如何使用 EasyBind fluent APIObservableList从绑定电流中获取一个。selectedItem声明一个本地ListProperty并将其绑定到所选项目的我可以利用ListProperty成为ObservableList. 我认为 EasyBind 某处没有遵循。感觉类型信息在某处丢失了。我无法将所有这些变量放在最后一个代码中,我不明白为什么 EasyBind.map() 会ebDetailList在最后一个代码中接受,但不会接受obsList

那么,现在的问题是,为什么这个绑定只在第一次监听 CheckBox 事件?支持列表中的提取器ListProperty不执行任何操作。我想这obsList.bind()是用模型中的一个替换后备列表,它没有提取器。

0 投票
2 回答
55 浏览

java - How to not lose decimal places when doing "longProperty1.divide(longProperty2)"?

I have two LongProperty (there are no decimal places in a long) variables (longProperty1 and longProperty2). I need to divide them and I need to keep the division result in a DoubleProperty (there are decimal places in a double) variable (result) without losing decimal places.

longProperty1 and longProperty2 are of type LongProperty because they receive very large numbers, so I can't cast them to DoubleProperties.

On the other hand, the result will receive a value from 0.0 to 1.0 (for example: 0.0, 0.2975, 0.5378, 0.9853, 1.0), because in my real problem longProperty1 <= longProperty2(for example: 500/600=0.8333, 1/2=0.5, 1897/5975=0.3174, ...).

How to do this?

0 投票
2 回答
1100 浏览

javafx - JavaFX 根据复选框状态禁用 TableColumn

我希望仅在选中复选框时才TableColumn<CustomObject, String> tableColumn基于字段值禁用 a。我可以禁用里面的文本框但是不确定如何检查里面的复选框的状态 下面是相关的代码片段,如果有人能阐明这一点,我将不胜感激CustomObjectTableColumn<CustomObject, Boolean> tableColumnTwopublic void updateItem(String s, boolean empty)updateItem

0 投票
1 回答
1198 浏览

javafx - JavaFX 绑定仅在调整窗口大小后应用

当我在我的 Main (JavaFX) 类的 start 方法中运行以下代码时,我得到了奇怪的结果。窗口被显示,但pane(带有绿色边框)的宽度为 0。它应该与容器的高度具有相同的宽度,因为我将 prefWidth 绑定到了 height 属性。然后,当我调整窗口大小时,绑定生效,窗格变为正方形。请注意,如果我最大化窗口,它也不会应用绑定。

谢谢!

0 投票
1 回答
1868 浏览

java - JavaFX 复杂字符串绑定

我是 JavaFX 的新手,想知道 Bindings API 是否允许更简单的方法来实现以下目标。考虑一个模型,它包含一个可能为空的数据库(因为数据库异步加载)和一个显示status反映数据库状态的标签的视图。如果它为空,它应该说类似“正在加载...”,如果不是,它应该显示数据库中有多少项目。如果状态可以反映数据库在增长或缩小时的大小,那也很棒。

到目前为止,我知道我可以使用转换器将整数属性(数据库的大小)绑定到标签的文本属性。这很好,但我希望标签显示的不仅仅是数字。一个本地化的字符串,例如“Loaded {0} items”。我们不要忘记数据库可能仍然为空。

这是我现有的解决方案

它可以工作,但是有没有办法用一连串的绑定来做到这一点,或者至少是其中的一部分?我已经看到布尔绑定有多么强大(和冗长),但我不确定字符串绑定是否可以实现如此灵活的功能。