Java 使用上下箭头键进行遍历-操作按钮';s聚焦输出

Java 使用上下箭头键进行遍历-操作按钮';s聚焦输出,java,events,user-interface,swt,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) {

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

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);
        }
    }
});
这适用于文本和组合框。但第三个字段是一个按钮(
compositeObj,SWT.CHECK
),此时这不起作用,因为生成了
SWT.FocusOut
事件,焦点移动到下一个按钮“确定”“取消”,而不是紧接其后的组合框。选项卡遍历按照正确的顺序进行,如文本、文本、按钮、组合、按钮和按钮。 无法使用
FocusListener
,因为无法单独处理向上和向下箭头事件


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

在按钮上使用如下所示的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;
}
}
});

无论如何,谢谢。

如果您使用tab,您的小部件排序是正确的,遍历工作正常吗?也就是说,如果您从复选框
按钮
中签出,您将转到组合而不是确定按钮?是,从复选框中签出将转到组合而不是确定按钮。