实时计算数据 - 网格(使用Vaadin 7.4.9)

时间:2017-08-23 19:29:09

标签: grid vaadin

这是我的代码,我需要你的帮助。我需要为我的网格添加监听器,这可以将结果实时添加到网格中(例如,在点击按钮后没有)。我想将数字添加到“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);

/* -------------------------------- */

1 个答案:

答案 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);
    }
});