在 Nattable 中显示多重编辑的示例

Example showing Multi Edit in Nattable

我有一个要求,其中单击单元格时,必须可以进行正常编辑,双击单元格时应打开一个对话框以编辑单元格。这两者是单独可能的。我看到了一种方法 "boolean supportMultiEdit(IConfigRegistry configRegistry, List configLabels)",但没有示例可以说明其工作原理。有没有人用过或者可以展示一下它的配置。

多编辑意味着可以一次编辑多个单元格。这当然是在编辑器中完成的,因为执行多重编辑内联是没有意义的。你应该看看 openInline(IConfigRegistry, List<String>) 或者更好的 EditConfigAttributes#OPEN_IN_DIALOG 来解决你正在寻找的问题。

但您实际上是在寻找一种方法来处理在不同的 UI 交互中以不同方式打开编辑器。所以需要注册对应的UI绑定。这已在 NatTable Forum.

中讨论过

并且 EditorExample 显示了相当多的可用于编辑的可能配置选项。几乎每个可编辑示例都显示了多重编辑功能。您只需 select 多个要编辑的单元格,然后开始键入或按 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));
                }
            });
    }
}