请支持我下面的问题。
我有一个包含一个表和其他组件的对话框。该表有多行和多列。列包含文本字段,用户输入数据。
但是,源代码是由其他一些层构建的,如下所示:
如果我留在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();
}
});
我期待着你的回答。
答案 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之外写的,所以可能会有一些错误。