Events 使用vaadin捕获表中textfield上的值更改事件

Events 使用vaadin捕获表中textfield上的值更改事件,events,listener,vaadin,Events,Listener,Vaadin,请支持我下面的问题 我有一个对话框,其中包含一个表和其他组件。该表具有多行和多列。列包含由用户输入数据的文本字段 但是,源代码是由其他一些层构建的,如下所示: 对话框组件是由DialogA类构建的 Table组件由TableB类构建 TableB调用generator类GeneratorC,生成此表的列、行和文本字段 如果我停留在GeneratorC中,我可以在表B中的文本字段上添加侦听器并捕获事件,但我停留在DialogA中,我无法捕获该文本字段上的值更改事件。虽然我在TableB上添加了监听

请支持我下面的问题

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

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

  • 对话框组件是由DialogA类构建的
  • Table组件由TableB类构建
  • TableB调用generator类GeneratorC,生成此表的列、行和文本字段
  • 如果我停留在GeneratorC中,我可以在表B中的文本字段上添加侦听器并捕获事件,但我停留在DialogA中,我无法捕获该文本字段上的值更改事件。虽然我在TableB上添加了监听器,但是这个监听器只捕获列和行的事件,这个监听器不捕获任何文本字段的事件

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

    源代码段将listener添加到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();
            }
       });
    

    我期待着您的回答。

    应该将侦听器添加到您在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之外编写了它,因此可能会有一些错误。

    您的答案不完整。请您解释一下
    TextFieldColumnGenerator
    将在哪里使用好吗?@TantaouiElMehdi抱歉,这是两年前的事了。我不知道它是怎么用的。