拦截 table 项上的点击事件的最佳方法

Best way to intercept click event on table item

我正在使用两个 table,第一个包含 "Teams",第二个包含 "Team members",并根据第一个 table 选择进行填充。我还会根据选择显示各种统计数据,无论是团队还是特定成员。如果没有选择成员,则显示团队统计数据,否则显示成员统计数据。

我在 table 上使用 ItemChangeListeners 来重绘统计数据,但这阻止我点击一个已经选择的团队以 "deselect" 从该团队中选择一个成员,因为没有事件在那种情况下被触发。作为一种解决方案,我还在团队 table 中使用了 ClickListener,但 它似乎只有在我单击单词时才有效(而不是在整个单元格上工作) .

teamsTable.setClickListener("name", new Table.CellClickListener() {
        @Override
        public void onClick(Entity item, String columnId) {
            if (teamsDs.getItem() == item) {
                teamsDs.setItem(null);
                teamsDs.setItem((Team) item);
            } else {
                teamsDs.setItem((Team) item);
                teamsTable.setSelected((Team) item);
            }
        }
    });

是否有更好的方法来捕获对 table 单元格的点击?还是有更好的方法来解决这个问题?

由于 CUBA Table 是 Vaadin table 的包装器,您可以将 Vaadin 的 ItemClickListener 与 CUBA table:

一起使用
public class DemoScreen extends AbstractWindow {
    @Inject
    private Table<User> usersTable;

    @Override
    public void init(Map<String, Object> params) {
        super.init(params);

        com.vaadin.ui.Table vTable = usersTable.unwrap(com.vaadin.ui.Table.class);
        vTable.addItemClickListener((ItemClickEvent.ItemClickListener) event ->
                showNotification("Item " + event.getItemId())
        );
    }
}

每次单击 table 单元格时都会触发它。