3

请支持我下面的问题。

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

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

  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();
        }
   });

我期待着你的回答。

4

1 回答 1

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 之外编写的,因此可能会出现一些错误。

于 2012-06-05T11:30:33.933 回答