0

当特定行中的值发生更改时,我想在我的 IndexedContainer 中处理 Property.ValueChangeEvent。我希望作为参数传递的“事件”将提供已更改的信息。

IndexedContainer container = new IndexedContainer();
.
. add container properties, insert items ...
.
container.addValueChangeListener(this)
.
.
public void valueChange(ValueChangeEvent event) {
  // How to get itemId and another properties from the same item?
  event.getProperty(); // This returns only whole container
}

getProperty() 函数没有给我信息,它来自哪一行和哪一列。感谢帮助。

JH

4

2 回答 2

1

通常在组件中使用容器,并且是侦听“valueChange”的组件。获取选中项的方法是:

Item itemSelected = component.getContainerDataSource().getItem(component.getValue());
//get for example "id" property
Integer id = (Integer) itemSelected.getItemProperty("id").getValue();

否则,您只是单独使用容器吗?如果是这样,你能更具体吗?因为这不是“标准”方式。问候

于 2014-10-14T13:04:06.617 回答
0

它不是很有效,但它有效:

container.addValueChangeListener(new ValueChangeListener() {
    private static final long serialVersionUID = 1L;

    @Override
    public void valueChange(ValueChangeEvent event) {
        for (Object itemId : container.getItemIds()) {
            for (Object propId : container.getContainerPropertyIds()) {
                Property<?> p = container.getContainerProperty(itemId, propId);
                Object o = ((EventObject) event).getSource();
                if (p.equals(o)) {
                    System.out.println("itemId: " + itemId);
                    System.out.println("propertyId: " + propId);
                    return;
                }
            }
        }
    }
});

eventaPropertyValueChangeEvent并且getSource()方法返回IndexedContainerProperty。问题是那些是private类。IndexedContainerProperty包含 the和itemIdthe propertyIdtoo。

于 2014-10-14T14:48:25.530 回答