Java JGoodies绑定,焦点丢失时不提交,键入的每个字符都不提交

Java JGoodies绑定,焦点丢失时不提交,键入的每个字符都不提交,java,swing,user-interface,binding,jgoodies,Java,Swing,User Interface,Binding,Jgoodies,在JGoodies绑定API()中,有一个CommittenFocusLost参数: CommittenFocusLost-为true以提交焦点丢失时的文本更改,为false 提交对键入的每个字符的文本更改 我想要在焦点丢失时没有提交,并且在键入字符时没有提交的行为。我只希望在调用Bindings.commitimmediately()时有一个commit。我能做到吗?我不是100%肯定,但你能做到 您需要使用BasicComponentFactory来创建组件 并使用BasicComponen

在JGoodies绑定API()中,有一个CommittenFocusLost参数:

CommittenFocusLost-为true以提交焦点丢失时的文本更改,为false 提交对键入的每个字符的文本更改


我想要在焦点丢失时没有提交,并且在键入字符时没有提交的行为。我只希望在调用Bindings.commitimmediately()时有一个commit。我能做到吗?

我不是100%肯定,但你能做到

您需要使用BasicComponentFactory来创建组件 并使用BasicComponentFactory.createTextField(ValueModel),不带bool参数


然后,您需要弄清楚如何以及何时调用价值模型上的保险柜,以便相应地保存。

您可能正在寻找
BufferedValueModel

包装另一个ValueModel(主题)并延迟主题值更改的ValueModel。返回主题的值,直到设置了值为止。在触发器通道更改为Boolean.TRUE之前,缓冲值不会写入主题

PresentationModel.getBufferedValue()
对于创建它们很有用


然而,通常我会避免使用缓冲模型,因为它会给已经相当复杂的体系结构模型增加额外的复杂性。而且,它不能很好地用于模型验证。我建议将绑定的自动提交行为放在一边,并围绕它构建代码

:

我个人更喜欢通过复制域对象图来缓冲。 在许多应用程序中,客户端上的域对象是 后端域对象的副本。在这种情况下,您可以操作 在客户端域对象上,无需进一步缓冲。 刷新对客户端域对象所做的所有更改 您可以从后端重新加载它们

无论如何,如果要在表示模型(PM)层使用缓冲区, 你应该在下午提供。您的表示逻辑 然后对缓冲状态而不是域状态进行操作

您可以在绑定教程中找到一个示例。见 BufferedAlbumpPresentationModel。它演示了如何 聆听缓冲“经典”属性中的更改 更新缓冲区的“Composer Enabled”属性。 请注意,BufferedClassicalChangeHandler复制 在相册#SetClassic中实现的行为 如果唱片集不是古典音乐,则作曲家设置为null

您可以在中的旧软件包中找到教程