我想在这里存档的是使用向上和向下箭头键遍历控件 代码在显示对象中是这样的。可能看起来很奇怪,但这是一个要求: - /
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
,因为无法单独处理向上和向下箭头事件。
还有其他方法吗?提前感谢您的回复。
答案 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;
}
}
});
非常感谢。