Как правильно пройти клетки в таблице Nat? - PullRequest
0 голосов
/ 10 мая 2018

У меня есть простое CustomTextCellEditor, которое расширяется AbstractCellEditor

Я пытался пройти по ячейке, если клавиша со стрелкой нажата, когда ячейка либо пуста, либо мы находимся в конце данных ячейки.

textFieldControl.addTraverseListener(new TraverseListener() {

    @Override
    public void keyTraversed(TraverseEvent e) {
        switch (e.keyCode) {
        case SWT.ARROW_DOWN:                    
            commit(MoveDirectionEnum.DOWN, true);
            break;
        case SWT.ARROW_UP:
            commit(MoveDirectionEnum.UP, true);
            break;
        case SWT.ARROW_LEFT:
            if(textFieldControl.getText().length()==0 || textFieldControl.getCaretPosition() == 0 )
                commit(MoveDirectionEnum.LEFT, true);
            break;
        case SWT.ARROW_RIGHT:
            if(textFieldControl.getText().length()==0 || textFieldControl.getCaretPosition() == textFieldControl.getText().length() )
                commit(MoveDirectionEnum.RIGHT, true);
            break;
        }
    }
});

@Override
public boolean activateOnTraversal(IConfigRegistry configRegistry, List<String> configLabels) {
    return true;
}

Дело в том, что activateOnTraversal никогда не вызывается, и хотя да, когда я нажимаю клавишу со стрелкой в ​​соответствующее время, он меняет фокус на нужную ячейку, он не активируется.

Чего мне не хватает?

1 Ответ

0 голосов
/ 10 мая 2018

Обход запускается с помощью TAB , а не клавиш со стрелками.Если вы используете KeyListener вместо TraversalListener, оно должно работать.

То, что вы пытаетесь достичь, уже поддерживается TextCellEditor.Так что вы можете взглянуть на эту реализацию, чтобы увидеть, как она работает.

Для активации следующего редактора после обхода вам необходимо либо переопределить AbstractCellEditor#activateOnTraversal(), чтобы всегда возвращать true, либо настроить EditConfigAttributes.ACTIVATE_EDITOR_ON_TRAVERSAL для DisplayMode#EDITбыть правдой.То же самое относится к AbstractCellEditor#openAdjacentEditor() и EditConfigAttributes.OPEN_ADJACENT_EDITOR.

...