基于NatTable实现树表单列同时支持复选框和文本编辑的问题
解决方案
问题1:点击复选框触发文本编辑的修复
你当前的绑定逻辑错误,给复选框点击区域绑定了触发文本编辑的MouseEditAction,按如下修改:
- 替换复选框点击的绑定动作,使用专门处理复选框状态切换的动作类:
uiBindingRegistry.registerFirstSingleClickBinding( new CellPainterMouseEventMatcher( GridRegion.BODY, MouseEventMatcher.LEFT_BUTTON, checkBoxPainter), new ToggleCheckBoxValueAction());
- 额外新增文本区域的点击编辑绑定,仅点击文本部分才触发编辑模式:
uiBindingRegistry.registerSingleClickBinding( new CellPainterMouseEventMatcher( GridRegion.BODY, MouseEventMatcher.LEFT_BUTTON, textPainter), // 替换为你树列文本渲染对应的Painter实例 new MouseEditAction());
问题2:文本编辑不生效的修复
你给整个树列注册了DefaultBooleanDisplayConverter,导致文本编辑器提交的字符串值和布尔类型冲突,按如下拆分配置:
- 给树列配置自定义标签累加器,给复选框、文本区域分配独立的配置标签:
IColumnLabelAccumulator labelAccumulator = new IColumnLabelAccumulator() { @Override public void accumulateConfigLabels(LabelStack configLabels, int columnPosition, int rowPosition) { configLabels.addLabel("TREE_CHECKBOX_PART"); configLabels.addLabel("TREE_TEXT_PART"); } }; bodyLayerStack.getConfigLabelAccumulator().add(labelAccumulator);
- 分别给两个标签注册对应转换器,删除原来针对
TreeLayer.TREE_COLUMN_CELL的全局布尔转换器配置:
// 仅复选框区域使用布尔转换器 configRegistry.registerConfigAttribute( CellConfigAttributes.DISPLAY_CONVERTER, new DefaultBooleanDisplayConverter(), DisplayMode.NORMAL, "TREE_CHECKBOX_PART"); // 文本区域使用字符串转换器 configRegistry.registerConfigAttribute( CellConfigAttributes.DISPLAY_CONVERTER, new DefaultStringDisplayConverter(), DisplayMode.NORMAL, "TREE_TEXT_PART");
- 调整数据模型配套逻辑:不要将树列单元格值设置为单一布尔类型,改为包含勾选状态(布尔)和显示文本(字符串)的复合对象,同时配套
IPropertyAccessor分别映射两个属性到对应标签的编辑逻辑即可。
内容的提问来源于stack exchange,提问作者Ashray M V
相关产品推荐
相关产品推荐

