【问题标题】:JGoodies binding, no commit on focus lost and no commit on every character typedJGoodies 绑定,没有提交焦点丢失并且没有提交每个键入的字符
【发布时间】:2012-12-08 03:10:42
【问题描述】:

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

commitOnFocusLost - true 在焦点丢失时提交文本更改,false 对输入的每个字符提交文本更改

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

【问题讨论】:

    标签: java swing user-interface binding jgoodies


    【解决方案1】:

    我不是 100% 确定,但是你可以做到。

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

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

    【讨论】:

      【解决方案2】:

      你可能正在寻找BufferedValueModel

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

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


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

      Karsten Lentzsch on buffering:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-04-05
        • 1970-01-01
        • 2022-07-06
        • 1970-01-01
        • 2017-02-11
        • 1970-01-01
        • 2014-08-06
        • 2011-09-07
        相关资源
        最近更新 更多