2

別の同様のStackOverflowの質問は、ある程度まで私を助けてくれました。

私のTableViewerセルにはブールウィジェットが含まれてeditorsいます(通常のチェックボタンウィジェットではなく、「チェック済み」/「チェックなし」の切り替えボタン)。




テーブルは次の条件を満たしている必要があります。-
セルが選択されている場合は常にエディタを表示します。
-セルフォーカスが失われたときにエディタを無効にします。-が押されたときに
適切に次へ移動します。rowTAB




どうやら簡単で、実際には難しい。多くのリスナーの競合(TAB実際には機能しません)。

後で編集:

私はなんとかバグの大部分を解決することができました、しかしこの1つのバグはまだ私の頭を悩ませます。マウスでウィジェットの値を変更し、を押しTABてトラバースすると、フォーカスは次の行ではなく、次の2番目の行にジャンプします。しかし、スペースバーを使用してエディターの値を変更すると、トラバースは問題なく機能します。必要に応じて次の行にジャンプします。

それらのいまいましいリスナーをどのようにデバッグする必要がありますか?

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 に答える