这是我的代码,我需要你的帮助。我需要为我的网格添加监听器,这可以将结果实时添加到网格中(例如,在点击按钮后没有)。我想将数字添加到“firstNumber”列,将第二个数字添加到“secondNumber”列,然后在“result”列中添加数字的总和。
firstNumber:“1”,“secondNumber”:“1”,结果为“2”。
Grid grid = new Grid();
IndexedContainer container = new IndexedContainer();
grid.setContainerDataSource(container);
container.addContainerProperty("firstNumber", Integer.class, 0);
container.addContainerProperty("secondNumber", Integer.class, 0);
container.addContainerProperty("result", Integer.class, 0);
/* --- Need add this to the listener or method --- */
Item item = container.getItem(0);
int firstNumber = item.getItemProperty("firstNumber").getValue();
item = container.getItem(0);
int secondNumber = item.getItemProperty("secondNumber").getValue();
result = firstNumber + secondNumber;
item = container.getItem(0);
item.getItemProperty("result").setValue(result);
/* -------------------------------- */
答案 0 :(得分:2)
您可以使用ValueChange
事件,该事件会告诉您 奇妙 Container
中的值何时发生变化。不幸的是,该事件只会告诉您哪个Property
已更改以及新值。
由于你只有这些信息,你必须循环你的容器来重新计算事物,尽管时间上的怪物费用为[O(n*m) being n=nº columns and m=nº rows]
。
要循环容器,您可以使用这个简单的代码(它是最简单的方法,没有任何复杂的逻辑和东西):
container.addValueChangeListener(ev -> {
List<?> itemIds = container.getItemIds();
for(Object itemId: itemIds) {
Item item = container.getItem(itemId);
Integer firstNumber = (Integer) item.getItemProperty("firstNumber").getValue();
Integer secondNumber = (Integer) item.getItemProperty("secondNumber").getValue();
item.getItemProperty("result").setValue(firstNumber+secondNumber);
}
});