如何正确遍历Nat表中的单元格?

时间:2018-05-10 07:52:13

标签: java nattable

我有一个简单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 :(得分:0)

通过 TAB 而非箭头键触发遍历。如果您使用KeyListener代替TraversalListener,则应该有效。

TextCellEditor已经支持您尝试实现的目标。因此,您可以查看该实现,看看它是如何工作的。

要在遍历后激活下一个编辑器,您需要覆盖AbstractCellEditor#activateOnTraversal()以返回始终为true或将EditConfigAttributes.ACTIVATE_EDITOR_ON_TRAVERSAL DisplayMode#EDIT配置为true。这同样适用于AbstractCellEditor#openAdjacentEditor()EditConfigAttributes.OPEN_ADJACENT_EDITOR