JGoodies绑定,没有提交焦点丢失,也没有提交每个键入的字符

时间:2012-02-14 15:53:26

标签: java swing user-interface binding jgoodies

在JGoodies Bindings API(Link to API)中,有一个commitOnFocusLost参数:

  

commitOnFocusLost - 如果在焦点丢失时提交文本更改,则为true,false   在每个键入的字符上提交文本更改

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

2 个答案:

答案 0 :(得分:0)

我不是百分百肯定,但是你可以这样做。

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

您需要弄清楚如何以及何时在您的价值模型上调用保险箱以便相应保存。

答案 1 :(得分:0)

您可能正在寻找BufferedValueModel

  

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

PresentationModel.getBufferedValue()对于创建它们非常有用。


但是,通常我会避免使用缓冲模型,因为它会给已经非常复杂的架构模型增加额外的复杂性。此外,它不适用于模型验证。我建议单独保留绑定的自动提交行为,并围绕它构建代码。

Karsten Lentzsch on buffering

  

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

     

无论如何,如果你想在Presentation Model(PM)层使用缓冲区,   你应该在PM中提供它。你的演讲逻辑   然后在缓冲状态下运行,而不是在域状态。

     

您可以在Binding教程中找到一个示例。见   BufferedAlbumPresentationModel。它演示了如何   听取缓冲的“古典”财产的变化   更新缓冲的“composerEnabled”属性。   请注意,BufferedClassicalChangeHandler复制   在Album#setClassical中实现的行为设置   如果专辑不是经典的话,作曲家会为空。

您可以在JGoodies download archive中找到旧版程序包中的教程。