gpt4 book ai didi

java - Vaadin 7 组合框 - 键入文本时如何填充和下拉?

转载 作者:搜寻专家 更新时间:2023-11-01 01:52:22 24 4
gpt4 key购买 nike

我有一个应用程序,其中包含各种数据库记录的编辑器。这些记录相互引用。我正在开发一个基于 ComboBox 的新自定义数据感知组件:

public abstract class CustomDbLookupField<T> extends CustomField<T> implements Field<T> 

这是我想要的:

  • 组件看起来像一个组合框(我可以很容易地做到这一点)
  • 当相应的字段有一个行 ID 值时,该组件将显示该引用记录的文本表示(我也可以这样做)
  • 当用户开始在组合框中键入文本时,我想在数据库中搜索关键字,并用这些项目填充组合框,然后让
  • 为他下拉组合框,让他从结果中选择

我似乎无法完成最后两部分。我想将监听器绑定(bind)到“文本输入组合框”事件,但我找不到任何方法。此外,我不知道如何获取刚刚输入的文本。我正在尝试这样做:

cmb.addListener(com.vaadin.event.FieldEvents.TextChangeEvent.class,target, method);

但我不知道要为参数目标和方法传递什么。

最佳答案

这是一个很好的问题,而且不是几句话就能回答的问题。我会尽量先给你一个简短的回答,稍后再详细说明。我目前正在破解一个小例子来演示你想要实现的功能。但我还需要一些时间。我会在得到一些结果后立即更新我的答案。

到那时,对您的问题的简短回答是,如果您在组件上为 TextChangeEvents 注册一个监听器,您将需要有人来实际触发这些事件。这通常发生在客户端,例如在 TextField 中。当您从 CustomField 派生时,您仍然需要提供一些客户端实现。 CustomField 只是自定义字段实现的基本实现,没有大量现成的客户端功能。因此,在您的情况下,TextChangeEvents 的监听器实际上永远不会被调用。

通过从 ComboBox 派生,您可以更轻松地完成工作。在 ComboBox 中输入文本时,ComboBox 已经内置了对前缀过滤的支持。实际的过滤器功能是在 Container 中实现的,它是 ComboBox 的数据源。 诀窍是覆盖 protected 方法 ComboBox#getOptionsWithFilter(boolean) 以在数据库中进行过滤,并使用自定义的 Container 实现来提供从数据库中过滤的项目。

更新:正如 promise 的那样,我编写了一个小型演示应用程序,它展示了如何编写一个自定义 ComboBox,其项目在用户输入文本时从数据库中动态填充。这可以通过从 ComboBox 派生并覆盖方法 com.vaadin.ui.ComboBox.buildFilter(String, FilteringMode) 的简单 hack 来实现。覆盖的方法将需要返回自定义 Container.Filter 实现,该实现仅将当前过滤器字符串传递给自定义 com.vaadin.data.Container 实现。然后容器负责从数据库中获取过滤后的项目,并用查询结果填充自身。在我的示例中,我派生自 BeanItemContainer,在其中我在重写方法 de.oio.vaadin.SuggestingContainer.addFilter(Filter)

中执行自定义数据库过滤

您可以在 my GitHub project 查看演示.如果有任何不清楚的地方,请不要犹豫。

关于java - Vaadin 7 组合框 - 键入文本时如何填充和下拉?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23340047/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com