【发布时间】:2020-08-14 10:41:09
【问题描述】:
我有一个要求,在单元格中单击一次,必须可以进行正常编辑,并且在单元格中双击时应该打开一个对话框来编辑单元格。两者可以单独使用。我看到了一个方法“boolean supportMultiEdit(IConfigRegistry configRegistry, List configLabels)”,但没有显示工作的示例。有没有人用过或者可以展示一下它的配置。
【问题讨论】:
标签: nattable
我有一个要求,在单元格中单击一次,必须可以进行正常编辑,并且在单元格中双击时应该打开一个对话框来编辑单元格。两者可以单独使用。我看到了一个方法“boolean supportMultiEdit(IConfigRegistry configRegistry, List configLabels)”,但没有显示工作的示例。有没有人用过或者可以展示一下它的配置。
【问题讨论】:
标签: nattable
多重编辑意味着可以一次编辑多个单元格。这当然是在编辑器中完成的,因为内联执行多重编辑毫无意义。你应该看看openInline(IConfigRegistry, List<String>) 或者更好的EditConfigAttributes#OPEN_IN_DIALOG 来解决你正在寻找的东西。
但您实际上是在寻找一种方法来处理在不同 UI 交互上以不同方式打开编辑器的方式。所以需要注册相应的UI绑定。这已经在NatTable Forum 中讨论过。
EditorExample 显示了很多可供编辑的可能配置选项。几乎每个可编辑的示例都显示了多重编辑功能。您只需选择要编辑的多个单元格,然后开始输入或按 F2。
以下代码将使用基于 UI 绑定操作中添加的标签的配置来解决问题:
public class OpenEditorConfiguration extends AbstractRegistryConfiguration {
@Override
public void configureRegistry(IConfigRegistry configRegistry) {
configRegistry.registerConfigAttribute(
EditConfigAttributes.OPEN_IN_DIALOG,
Boolean.TRUE,
DisplayMode.EDIT,
"open_in_dialog");
}
@Override
public void configureUiBindings(UiBindingRegistry uiBindingRegistry) {
uiBindingRegistry.registerDoubleClickBinding(
new CellEditorMouseEventMatcher(GridRegion.BODY),
new IMouseAction() {
@Override
public void run(NatTable natTable, MouseEvent event) {
int columnPosition = natTable.getColumnPositionByX(event.x);
int rowPosition = natTable.getRowPositionByY(event.y);
ILayerCell cell = natTable.getCellByPosition(columnPosition, rowPosition);
cell.getConfigLabels().add("open_in_dialog");
natTable.doCommand(new EditCellCommand(
natTable,
natTable.getConfigRegistry(),
cell));
}
});
}
}
【讨论】: