如何确定是否已选中或取消选中单击的Vaadin表行?

时间:2015-07-24 11:45:52

标签: vaadin vaadin7

用户点击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();
  }
});

谢谢你, 史蒂夫

3 个答案:

答案 0 :(得分:3)

在表api中,您可以使用getValue()方法,该方法生成所选行。

根据是否在多线索模式下,您可以推断出会发生什么。

答案 1 :(得分:1)

使用Vaadin Grid代替表格。它具有selectionListener属性,可帮助您实现所需。

Grid API

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