使用vaadin捕获表中文本字段上的值更改事件

时间:2012-06-04 03:12:38

标签: events listener vaadin

请支持我下面的问题。

我有一个包含一个表和其他组件的对话框。该表有多行和多列。列包含文本字段,用户输入数据。

但是,源代码是由其他一些层构建的,如下所示:

  1. Dialog组件由DialogA类
  2. 构建
  3. 表组件由TableB类
  4. 构建
  5. TableB调用生成器类GeneratorC,该类生成此表的列,行,文本字段
  6. 如果我留在GeneratorC,我可以在TableB中的文本字段上添加监听器和捕获事件,但我留在DialogA中我无法在文本字段上捕获值更改事件。虽然我在TableB上添加了侦听器,但是此侦听器只捕获列和行的事件,但此侦听器不会捕获文本字段的任何事件。

    实际上,我只需要为文本字段捕获值更改事件。目前我还没有找到解决这个问题的方法。

    源代码段将监听器添加到TableB,此源代码保留在DialogA中:

     TableB.addListener(new Property.ValueChangeListener()
        {
            private static final long serialVersionUID =
            1L;
    
            @Override
            public void valueChange(
                ValueChangeEvent event)
            {
                 String temp = (String)event.getProperty().getValue();
            }
       });
    

    我期待着你的回答。

1 个答案:

答案 0 :(得分:0)

应将侦听器添加到您在ColumnGenerator中添加的文本字段中,而不是添加到表本身:

    private class TextFieldColumnGenerator implements Table.ColumnGenerator {

            private TextField tf;

            @Override
            public Component generateCell(final Table source, final Object itemId,
                    final Object columnId) {
                Item item = source.getItem(itemId);
                        tf.addListener(new FieldEvents.TextChangeListener() {

                @Override
                public void textChange(TextChangeEvent event) {

                    doSomething(event.getText());
                }
            });
    return tf;
    }

我认为这应该是正确的,我是在IDE之外写的,所以可能会有一些错误。