TableViewer双击激活CellEditor

来源:互联网 发布:淘宝xbox one手柄 编辑:程序博客网 时间:2024/06/01 23:27

在使用TableViewer的过程中,许多情况下我们需要给列添加CellEditor来使这一列的内容可以被编辑。

然而,通常情况下,CellEditor都是单击激活的,在某些时候,我们希望CellEditor不是那么频繁的被激活,那么可以使其双击以后才激活。


首先,创建TableViewer,并且添加ContentProvider,CellEditor,CellModify,LabelProvider等基础设施


final TableViewer v = new TableViewer(shell, SWT.BORDER | SWT.FULL_SELECTION);v.setContentProvider(new MyContentProvider());v.setCellEditors(new CellEditor[] { new TextCellEditor(v.getTable()), new TextCellEditor(v.getTable()), new TextCellEditor(v.getTable()) });v.setCellModifier(new ICellModifier() {@Overridepublic boolean canModify(final Object element, final String property) {return true;}@Overridepublic Object getValue(final Object element, final String property) {return "Column " + property + " => " + element.toString();}@Overridepublic void modify(final Object element, final String property, final Object value) {}});v.setColumnProperties(new String[] { "1", "2", "3" });// 添加3列TableViewerColumn column = new TableViewerColumn(v, SWT.NONE);column.getColumn().setWidth(200);column.getColumn().setMoveable(true);column.getColumn().setText("Column 1");column.setLabelProvider(new ColumnLabelProvider());column = new TableViewerColumn(v, SWT.NONE);column.getColumn().setWidth(200);column.getColumn().setMoveable(true);column.getColumn().setText("Column 2");column.setLabelProvider(new ColumnLabelProvider());column = new TableViewerColumn(v, SWT.NONE);column.getColumn().setWidth(200);column.getColumn().setMoveable(true);column.getColumn().setText("Column 3");column.setLabelProvider(new ColumnLabelProvider());

然后创建一个Celleditor激活策略并将其绑定到tableviewer上。


// 创建以个Editor激活策略,检测鼠标双击时返回true,使CellEditor被激活。TRAVERSAL样式为使用Tab按键时激活。final ColumnViewerEditorActivationStrategy actSupport = new ColumnViewerEditorActivationStrategy(v) {@Overrideprotected boolean isEditorActivationEvent(final ColumnViewerEditorActivationEvent event) {return event.eventType == ColumnViewerEditorActivationEvent.TRAVERSAL|| event.eventType == ColumnViewerEditorActivationEvent.MOUSE_DOUBLE_CLICK_SELECTION|| event.eventType == ColumnViewerEditorActivationEvent.PROGRAMMATIC;}};// 为tableviewer添加CellEditor自定义激活策略TableViewerEditor.create(v, actSupport, ColumnViewerEditor.TABBING_HORIZONTAL | ColumnViewerEditor.TABBING_MOVE_TO_ROW_NEIGHBOR| ColumnViewerEditor.TABBING_VERTICAL | ColumnViewerEditor.KEYBOARD_ACTIVATION | ColumnViewerEditor.TABBING_CYCLE_IN_ROW);final MyModel[] model = createModel();v.setInput(model);v.getTable().setLinesVisible(true);v.getTable().setHeaderVisible(true);


0 0
原创粉丝点击