我希望在特定行中更改值时,在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
答案 0 :(得分:1)
通常在组件中使用容器,并且该组件是侦听“valueChange”的组件。 获取所选项目的方法是:
Item itemSelected = component.getContainerDataSource().getItem(component.getValue());
//get for example "id" property
Integer id = (Integer) itemSelected.getItemProperty("id").getValue();
否则,你只是单独使用一个容器吗?如果是这样,你可以更具体一点吗?因为它不是一种“标准”的方式。 此致
答案 1 :(得分: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;
}
}
}
}
});
event
是PropertyValueChangeEvent
,getSource()
方法返回IndexedContainerProperty
。
问题是那些是private
类。
IndexedContainerProperty
也包含itemId
和propertyId
。