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

How determine if a Vaadin table row clicked in has been selected or deselected?

跟随用户在 Vaadin 7 table 中连续点击,我怎么知道 如果该行已被选择或取消选择 - 单击选定行将取消选择该行 - (因为还有一列 需要保持同步的复选框)?

当我在 ItemClickListener 中尝试 table.getValue() 时,如果 行被选中,如果行被取消选择,则为项目 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();
  }
});

谢谢, 史蒂夫

使用 Vaadin Grid 而不是 table。它具有 selectionListener 属性 可帮助您实现所需的功能。

Grid API

在 Table api 中,您可以使用 getValue() 方法,它会产生选定的行。

根据是否处于多选模式,您可以推断出会发生什么。

(since there is also a column of checkboxes which needs to kept in synch)?

使用 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();
  }
});