0

の特定の行にフォーカスを設定したいと思いTableViewerます。

フォーカスと入力の処理は次のように定義されます。

ColumnViewerToolTipSupport.enableFor(viewer, ToolTip.NO_RECREATE);

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

ColumnViewerEditorActivationStrategy actSupport = new ColumnViewerEditorActivationStrategy(viewer) {
            protected boolean isEditorActivationEvent(final 
                   ColumnViewerEditorActivationEvent event) {
                return event.eventType == ColumnViewerEditorActivationEvent.TRAVERSAL
                        || event.eventType == ColumnViewerEditorActivationEvent.MOUSE_CLICK_SELECTION
                        || (event.eventType == ColumnViewerEditorActivationEvent.KEY_PRESSED && event.keyCode == SWT.F2)
                        || event.eventType == ColumnViewerEditorActivationEvent.PROGRAMMATIC;
            }
};

TableViewerEditor.create(viewer, actSupport, ColumnViewerEditor.TABBING_HORIZONTAL
                | ColumnViewerEditor.TABBING_MOVE_TO_ROW_NEIGHBOR |
                 ColumnViewerEditor.TABBING_VERTICAL
                | ColumnViewerEditor.KEYBOARD_ACTIVATION);

行を選択するためのコードは次のとおりです。

getViewer().setSelection(new StructuredSelection(parameterTable.getViewer().getElementAt(selection)), false);

FocusCellOwnerDrawHighlighter問題は、を使用するとすぐに機能しsetSelectionなくなることです。つまり、行が選択されません。

私が間違っていることについて何か考えはありますか?

よろしくロジャー

4

1 に答える 1

0

これは解決策ではありません。何が問題になるかを詳しく説明するだけです。問題があると思います

FocusCellOwnerDrawHighlighter:110 line


                    ViewerCell cell = row.getCell(event.index);

                    if (focusCell == null || !cell.equals(focusCell)) {
                        removeSelectionInformation(event, cell);
                    } else {
                        markFocusedCell(event, cell);
                    }

初期フォーカス セルは、 のデフォルトのトップ インデックスになりますTable。フォーカスセルと選択セルは等しくないため、選択したセルの選択背景が削除されます。

于 2013-02-11T19:53:23.090 に答える