用户点击Vaadin 7表格中的一行后,我该如何判断 如果已选择或取消选择该行 - 单击所选行将取消选择该行 - (因为还有一列 需要保持同步的复选框?
当我在ItemClickListener中尝试table.getValue()时,如果是,则返回null 如果取消选择行,则选择行并输入项目ID,即与...相反 我原以为是什么?
table.addItemClickListener(new ItemClickEvent.ItemClickListener() {
@Override
public void itemClick(ItemClickEvent event) {
// how tell if row has been selected or deselected?
Object idx = table.getValue();
}
});
谢谢你, 史蒂夫
答案 0 :(得分:3)
在表api中,您可以使用getValue()方法,该方法生成所选行。
根据是否在多线索模式下,您可以推断出会发生什么。
答案 1 :(得分:1)
使用Vaadin Grid代替表格。它具有selectionListener
属性,可帮助您实现所需。
答案 2 :(得分:1)
(因为还有一列需要保留的复选框 同步)?
使用Grid
ans set grid.setSelectionMode(SelectionMode.MULTI);
默认情况下,您将有一个带复选框的额外列。
现在,如果您不想使用Grid
。
对于Table
,您应该使用vaadinTable.addValueChangeListener(...)
代替ItemClickListener
。
例如:
table.addValueChangeListener(new ValueChangeListener() {
@Override
public void valueChange(ValueChangeEvent event) {
//Set checkbox object as an itemId
CheckBox itemId = (CheckBox)event.getProperty().getValue();
//Manage Collection to add selected items
if(table.isSelected(itemId)) {
table.select(itemId);
itemId.setValue(true);//Add this item to collection
} else {
table.unselect(itemId); //Remove this item to collection
itemId.setValue(false);
}
}
});
另一种选择是,
table.addItemClickListener(new ItemClickEvent.ItemClickListener() {
@Override
public void itemClick(ItemClickEvent event) {
//Manage collection and manually fetch property of table
Object value = event.getItem().getItemProperty("property").getValue();
}
});