nag*_*lzs 4 java combobox vaadin7
我有一个应用程序,其中包含各种数据库记录的编辑器.这些记录是相互引用的.我正在开发一个基于ComboBox的新的自定义数据感知组件:
public abstract class CustomDbLookupField<T> extends CustomField<T> implements Field<T>
Run Code Online (Sandbox Code Playgroud)
这就是我想要的:
我似乎无法完成最后两部分.我想将监听器绑定到"文本键入组合框"事件,但我找不到任何方法.此外,我不知道如何获取刚刚输入的文本.我正在尝试这样做:
cmb.addListener(com.vaadin.event.FieldEvents.TextChangeEvent.class,target, method);
Run Code Online (Sandbox Code Playgroud)
但我不知道参数target和method要传递什么.
这是一个很好的问题,也是一个无法用几句话回答的问题.我会先尝试给你一个简短的答案,然后再尝试详细说明.我目前正在攻击一个小例子来演示你想要实现的功能.但我需要更多时间.我会在得到一些结果后立即更新我的答案.
在此之前,对您的问题的简短回答是,如果您在组件上注册TextChangeEvents的侦听器,则需要有人实际触发这些事件.这通常发生在客户端,例如在TextField.当你从中衍生出来CustomField时仍然需要提供一些客户端实现.CustomField只是您的自定义字段实现的基本实现,没有大量现成的客户端功能.因此,在您的情况下,TextChangeEvents实际上永远不会调用侦听器.
通过从ComboBox派生,您可以轻松完成.当在ComboBox中键入文本时,ComboBox已经内置了对前缀过滤的支持.实际的过滤器功能是在ContainerComboBox的数据源中实现的.诀窍是覆盖受保护的方法ComboBox#getOptionsWithFilter(boolean)以在数据库中过滤并使用自定义Container实现,该实现提供来自数据库的过滤项.
更新:正如所承诺的,我编写了一个小型演示应用程序,该应用程序显示了如何编写自定义ComboBox,当用户键入文本时,其项目将从数据库中动态填充.这可以通过导出ComboBox和重写方法通过简单的黑客来实现com.vaadin.ui.ComboBox.buildFilter(String, FilteringMode).重写的方法将需要返回一个自定义Container.Filter实现,该实现只是将当前过滤器String转移到自定义com.vaadin.data.Container实现.然后,容器负责从数据库中提取过滤的项目并使用查询结果填充自身.在我的示例中,我派生自我BeanItemContainer在重写方法中执行自定义数据库筛选的位置de.oio.vaadin.SuggestingContainer.addFilter(Filter)
您可以在我的GitHub项目中查看演示.不要犹豫,询问是否有任何不清楚的事情.
| 归档时间: |
|
| 查看次数: |
4105 次 |
| 最近记录: |