使用向上和向下箭头键遍历 - 处理按钮的FocusOut

时间:2012-02-09 13:24:21

标签: java events user-interface swt

我想在这里存档的是使用向上和向下箭头键遍历控件 代码在显示对象中是这样的。可能看起来很奇怪,但这是一个要求: - /

displayObj.addFilter(SWT.KeyDown,new Listener() {
    public void handleEvent(Event event) {
        Control ctrl= (Control) event.widget;
        if(event.keyCode==SWT.ARROW_UP) {                   
            ctrl.traverse(SWT.TRAVERSE_TAB_PREVIOUS);
        } else if(event.keyCode==SWT.ARROW_DOWN) {
            ctrl.traverse(SWT.TRAVERSE_TAB_NEXT);
        }
    }
});

这适用于文本和组合框。但是第三个字段是一个Button(compositeObj,SWT.CHECK),此时这不起作用,因为生成SWT.FocusOut事件并且焦点移动到下一个按钮'OK''取消'而不是组合框之后立即坐下。选项卡遍历正确地按正确顺序发生,如文本,文本,按钮,组合,按钮和按钮。 无法使用FocusListener,因为无法单独处理向上和向下箭头事件。

还有其他方法吗?提前感谢您的回复。

1 个答案:

答案 0 :(得分:0)

使用TraverseListener如下所示在按钮上解决了问题。

cancelButton.addTraverseListener(new TraverseListener () {
public void keyTraversed(TraverseEvent e) {
e.doit=false;
if (e.keyCode==16777218) {
userIdText.forceFocus();
} else if (e.keyCode==16777217) {
connectButton.forceFocus();
}
else {
//do nothing,i guess;
}
}
});

非常感谢。