拦截 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 单元格时都会触发它。
我正在使用两个 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 单元格时都会触发它。