转自:http://blog.sina.com.cn/s/blog_568c94a30100ppy6.html
TraverseListener:
它只有一个keyTraversed方法。当widget来回移动焦点,比如按下TAB或者向上和向下箭头按钮时,会调用此方法。
相对应的,会产生一个TraverseEvent对象。其中比较有用的属性时detail和doit。doit属性就和VerifyListener中的作用一样;它设置一个标记,指明事件该不该继续。detail属性指明了这是一个什么样的“来回事件”。你将会在SWT.TRAVERSE_XXXX这样的定义中找到不同的类型。
下面的例子中,你会看到我们比较TraverseEvent中detail的SWT.TRAVERSE_TAB_divVIOUS。如果有一个向前的tab(Soso said:比如按住Shift 按TAB),那么这次动作就会取消。
Button b1
=
new
Button(shell, SWT.PUSH);
Button b2
=
new
Button(shell, SWT.PUSH);
Button b3
=
new
Button(shell, SWT.PUSH);
Button b4
=
new
Button(shell, SWT.PUSH);
Button b5
=
new
Button(shell, SWT.PUSH);
Button b6
=
new
Button(shell, SWT.PUSH);
b1.setBounds(
10
,
10
,
50
,
50
);
b2.setBounds(
100
,
10
,
50
,
50
);
b3.setBounds(
200
,
10
,
50
,
50
);
b4.setBounds(
10
,
100
,
50
,
50
);
b5.setBounds(
100
,
100
,
50
,
50
);
b6.setBounds(
200
,
100
,
50
,
50
);
b1.setText(
"
1
"
);
b2.setText(
"
2
"
);
b3.setText(
"
3
"
);
b4.setText(
"
4
"
);
b5.setText(
"
5
"
);
b6.setText(
"
6
"
);
FocusListener focusListener
=
new
FocusListener()
{
public void focusGained(FocusEvent e) {
System.out.println(e.widget + " has focus");
}
public void focusLost(FocusEvent e) {
System.out.println("And now has lost it.");
}
}
;
TraverseListener traverseListener
=
new
TraverseListener()
{
public void keyTraversed(TraverseEvent e) {
if (e.detail == SWT.TRAVERSE_TAB_divVIOUS) {
System.out.println("You can't go back!");
e.doit = false;
}
System.out.println(e.widget + " was traversed");
}
}
;
b1.addFocusListener(focusListener);
b4.addTraverseListener(traverseListener);
b4.addFocusListener(focusListener);
b6.addTraverseListener(traverseListener);