问题标签 [reactfx]
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.
java - 将 JavaFx 属性绑定到多个可观察对象
我正在编写一个JavaFx 控件,该控件由一个获取用户输入的子控件组成,例如TextField。主要组件拥有一个属性,该属性表示文本的解析表示,例如 LocalDateTime。当用户输入一些东西时,这个属性应该被更新,所以我将它绑定到孩子的 value 属性。还应该可以通过绑定 value 属性从外部更改当前值,因此这必须是双向绑定才能自动更新子项。该控件工作正常,直到客户端代码绑定到该属性。以下代码显示了我的问题:
导入 javafx.beans.property.SimpleIntegerProperty;
运行代码时,出现无法设置绑定属性的异常:
我确信这一定是一个常见问题,我只是没有看到明显的解决方案。我正在使用 ReactFx,因此欢迎使用纯 JavaFx 或 ReactFx 的任何解决方案。真正的代码使用 aVar.mapBidirectional
在内部绑定 Parent 和 Child 属性。
我想要实现的是: 1. 如果outside
' 的值发生变化,这应该传播到 p.value,然后传播到 p.a1.p 2. 如果 p.a1.p 发生变化,这应该传播到 p。价值
由此我得出结论,Parent.value 和 Parent.a1.p 总是相同的(加上映射中应用的一些转换),我使用双向映射。outside 可以独立更改并且可以与 value 不同,因此我使用单向绑定。
java - 在 Flux 架构中显示确认对话框
我正在尝试了解 Flux 架构。我正在使用 JavaFX 和FluxFX实验框架。
我正在编写一个程序,它允许用户在特定时刻(“3 小时内”、“10 点钟”等)安排一些任务。关键是必须同时安排一个任务。
当用户点击“schedule”按钮时,ScheduleAction 被调度,调度任务被存储在 ScheduleStore 中。一切还好。当用户尝试安排第二个任务时,我想问他/她是否要取消前一个任务。我怎样才能做到这一点?目前,我正在使用这种方法:
- 调度 ScheduleAction。
- ScheduleStore 接收操作并检查计划任务是否已存在。
- 如果任务已经存在,则商店将消息推送到 EventStream(来自ReactFX)。
- 该视图正在观察 EventStream,并在确认对话框中显示消息(使用 JavaFX 警报)。
- 用户的响应在 ResponseAction 中发送。
我认为这种方法“闻起来很糟糕”。做这样的事情的正确方法是什么?
非常感谢!
java - 如何通过订阅事件流来获取属性的来源?
如果我有一个 JavaFX 属性并且我从这个属性创建了一个事件流:
是否有可能在创建时设置源(在本例中为“节点”)或稍后在订阅中获取此对象?
例如:
或在创建时:
java - 如何重置 EventStream 中的最后一个累积值?
我有一个来自 N 个可观察值的合并 EventStream。从这个值我想要最小的一个。例如:
我的问题是我希望在第一个过滤值之后还有一个新的初始值用于累积。在这种情况下,例如“Integer.MAX_VALUE”之类的东西。
因此,累积中的下一个比较不是:
"Math.min(2,5)" -> "Math.min(2,3)"
而是
"Math.min(MAX_VALUE,5)" -> "Math.min (5,3)"。
所以输出不应该是:
2, 2, 2, 2, 2
但是
a -> 2:输出最小值 2
b -> 3:输出最小值 2
c -> 4:输出最小值 2
a -> 0:OK 条件(值 < 1)为真。现在重置或更好地重复流(不保留累积的最后一个值 2)
b -> 5:最小输出 5
c -> 3:最小输出 3
a -> 4:最小输出 3
...
java - ReactFX Val,我如何获得空状态的绑定?
在 JavaFX 中,您可以通过andProperty
获得 null 或非 null 的布尔绑定。val.isNull()
val.isNonNull()
这在 ReactFX 中的等价物是什么?
我试过了:
但它会返回Val<Boolean>
带有实际值的 anull
而不是true
(在其他情况下正如预期的那样)。
java - LiveList 在更新时被调用两次
我LiveList
用来将组的孩子绑定到包含孩子数据的列表。这是一个例子:
我的问题是绑定列表中的每个更改intList
都会更新两次,这会创建比需要更多的对象。运行代码给出:
我希望对于其中的每个元素,该组的孩子中intList
都会有一个Circle
。为什么会发生这种情况,我怎样才能让它正常工作?
java - 在 ReactFX 中组合多个更改流
问题
您如何正确组合 ReactFX 中的多个属性更改流以用于 UndoFX(或任何用例)?
细节
这是我要完成的工作的简短说明(完整的示例代码发布在 GitHub 上):
有一个示例模型具有两个属性。为简单起见,它们是双重属性
在示例代码中,有用于更改其中一个或两个属性的按钮。如果这就是更改,我想撤消对两者的更改。
根据 UndoFX 示例,每个继承自基类的更改类(此处也缩写为):
所有更改都实现一个接口
在阅读了文档之后,我首先创建了一个事件流来捕获对每个属性的更改:
我的第一次尝试是像这样合并流
在这种情况下发生的情况是,如果同时更改 A 和 B 属性,则流中将有两个更改,并且每个更改将单独撤消而不是一起撤消。对 setter 的每次调用都会在适当的流中进行更改,然后将其发送到bothStream
,然后包含两个单独的事件而不是一个。
经过更多阅读后,我尝试将流和映射组合成一个单独的更改对象:
其中ChangeBoth
定义为:
这导致IllegalStateException: Unexpected change received
被抛出。经过一番挖掘,我确定了为什么会发生这种情况:当ChangeBoth
正在撤消(通过invert()
和redo()
调用)时,它将每个属性设置回旧值。但是,当它设置每个属性时,更改会通过流发回,从而在ChangeBoth
将两个属性设置回旧值之间将新的内容放入流中。
概括
所以回到我的问题:这样做的正确方法是什么?有没有一种方法可以将两个属性的流更改为一个不会导致此问题的更改对象?
编辑 - 尝试 1
根据 Tomas 的回答,我添加/更改了以下代码(注意:repo 中的代码已更新):
changeAStream
并changeBstream
保持不变。
我没有合并流,而是按照 Tomas 的建议进行操作,并创建了一个二元运算符以将两个更改减少为一个:
并将事件流更改为
现在按钮操作没有实现,setonAction
而是使用事件流处理
这对于适当地组合事件非常有用,但是对于 A+B 更改,撤消仍然会中断。它适用于单独的 A 和 B 更改。这是两个 A+B 更改然后撤消的示例
编辑 - 尝试 2 - 成功!!
Tomas 很好地指出了解决方案(我应该意识到这一点)。只是在做的时候暂停redo()
:
java - 何时使用“suppressWhen(...)”或“filter(...)”?
我对“suppressWhen(...)”和“filter(...)”这两种方法有疑问,如果在上下文中使用它们有什么不同,例如:
我有一个布尔属性,如:
我有一系列价值观,例如:
BooleanProperty bp
如果是假的,当我想过滤流时有什么区别,例如:
或者
好的,很明显“suppressWhen”创建了一个“SuspendedWhenStream”的实例并使用了一个“SuspendableEventStream”,所以最好问问这里什么最有意义?
创建额外的“SuspendableEventStream”或类似的东西是否效率更高?
java - 为什么JavaFX RichTextFx API 无法访问重要类?
我正在研究我的一个小项目,以弄清楚如何创建自己的代码编辑器,所以首先我查看了一些库并找到了 RichTextFX。它有助于创建基于代码的编辑器等。https://github.com/FXMisc/RichTextFX所以我下载了包含所有依赖项的胖 JAR,并复制粘贴了 Java 关键字演示(https://github.com/FXMisc/RichTextFX/blob/master/richtextfx-demos/ src/main/java/org/fxmisc/richtext/demo/JavaKeywordsDemo.java ) 到一个测试类中,将所有内容添加到我的 module-info.java 并尝试运行该应用程序。
我收到此错误,无法访问 ListLive,为什么?