2

另一个类似的 StackOverflow 问题在一定程度上帮助了我。

我的TableViewer单元格包含布尔小部件editors(不是您通常的检查按钮小部件,而是一个切换按钮,可以是“选中”/“未选中”)。




表格必须:
- 选择单元格时始终显示编辑器;
- 当单元格焦点丢失时禁用编辑器;-按下时
正确移动到下一个;rowTAB




显然容易,实践起来很难。很多听众冲突(TAB实际上不起作用)。

后期编辑:

我已经设法解决了大多数错误,但是这个错误仍然让我大吃一惊。如果我用鼠标更改小部件的值,然后按TAB遍历,焦点会跳转到下一行,而不是下一行。但是,如果我使用空格键更改编辑器的值,那么遍历就可以了;它应该跳到下一行。

我应该如何调试那些该死的听众?

4

1 回答 1

5

为了便于开发,您可以在 JFace 中使用一些帮助程序类,而不必处理选项卡或鼠标单击的事件处理。这是一个可以帮助您入门的片段:

TableViewer viewer = ...

TableViewerFocusCellManager focusCellManager = new TableViewerFocusCellManager(viewer, new FocusCellOwnerDrawHighlighter(viewer));

ColumnViewerEditorActivationStrategy activationSupport = new ColumnViewerEditorActivationStrategy(viewer) {
    protected boolean isEditorActivationEvent(ColumnViewerEditorActivationEvent event) {
        if (event.eventType == ColumnViewerEditorActivationEvent.MOUSE_CLICK_SELECTION) {
            EventObject source = event.sourceEvent;
            if (source instanceof MouseEvent && ((MouseEvent)source).button == 3)
                return false;
        }
        return super.isEditorActivationEvent(event) || (event.eventType == ColumnViewerEditorActivationEvent.KEY_PRESSED && event.keyCode == SWT.CR);
    }
};

TableViewerEditor.create(viewer, focusCellManager, activationSupport, ColumnViewerEditor.TABBING_HORIZONTAL | 
    ColumnViewerEditor.TABBING_MOVE_TO_ROW_NEIGHBOR | 
    ColumnViewerEditor.TABBING_VERTICAL |
    ColumnViewerEditor.KEYBOARD_ACTIVATION);
于 2012-12-06T16:21:50.773 回答