我有一个简单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
永远不会被调用,而是,当我在适当的时间点击箭头键时,它会将焦点更改为所需的单元格,它不会被激活。
我错过了什么?
答案 0 :(得分:0)
通过 TAB 而非箭头键触发遍历。如果您使用KeyListener
代替TraversalListener
,则应该有效。
TextCellEditor
已经支持您尝试实现的目标。因此,您可以查看该实现,看看它是如何工作的。
要在遍历后激活下一个编辑器,您需要覆盖AbstractCellEditor#activateOnTraversal()
以返回始终为true或将EditConfigAttributes.ACTIVATE_EDITOR_ON_TRAVERSAL
DisplayMode#EDIT
配置为true。这同样适用于AbstractCellEditor#openAdjacentEditor()
和EditConfigAttributes.OPEN_ADJACENT_EDITOR
。