【问题标题】:Capture value change event on textfield in table using vaadin使用 vaadin 捕获表中文本字段上的值更改事件
【发布时间】:2012-06-08 05:01:21
【问题描述】:

请支持我下面的问题。

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

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

  1. Dialog组件由DialogA类构建
  2. Table组件由TableB类构建
  3. TableB 调用生成器类 GeneratorC,它为此表生成列、行、文本字段

如果我留在 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();
        }
   });

期待你的回答。

【问题讨论】:

    标签: events listener vaadin


    【解决方案1】:

    侦听器应添加到您在 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 对不起,这是两年前的事了。我不知道它是如何使用的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-28
    • 1970-01-01
    • 1970-01-01
    • 2013-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多