14.4 焦 点 事 件
在窗口系统中,当组件获得输入焦点或失去焦点时将触发相应的事件。SWT通过FocusListener监听焦点事件。
14.4.1 FocusListener接口
在SWT中,通过实现FocusListener接口来响应获得焦点和失去焦点的事件。FocusListener接口如例程14-7所示。
例程14-7 FocusListener.java
package org.eclipse.swt.events;
import org.eclipse.swt.internal.SWTEventListener;
public interface FocusListener extends SWTEventListener {
public void focusGained(FocusEvent e);
public void focusLost(FocusEvent e);
}
其中,focusGained表示组件获得焦点事件的响应方法,focusLost表示组件失去焦点事件的响应方法,FocusEvent为系统传入的焦点事件的参数,用户可以通过FocusEvent参数找到相应的组件。
14.4.2 焦点事件实例
为了更深入地理解焦点事件,下面通过具体的实例演示如何响应焦点事件。该程序只是简单地改变当前获得焦点和失去焦点组件的显示信息。在具体的实例中,读者可以根据需要进行修改,代码如例程14-8所示。
例程14-8 FocusListenerExample.java
public class FocusListenerExample {
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new GridLayout(3, true));
shell.setText("One Potato, Two Potato");
//新建焦点监听器
FocusListener listener = new FocusListener() {
public void focusGained(FocusEvent event) {
//获得触发事件的组件
Button button = (Button) event.getSource();
//焦点获得时改变显示文本
button.setText("I'm It!");
}
public void focusLost(FocusEvent event) {
//获得触发事件的组件
Button button = (Button) event.getSource();
//焦点获得时改变显示文本
button.setText("Pick Me!");
}
};
for (int i = 0; i < 6; i++) {
Button button = new Button(shell, SWT.PUSH);
button.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
button.setText("Pick Me!");
button.addFocusListener(listener);
}
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
}
程序中显示了6个按钮,并为按钮添加上了焦点监听器,程序运行效果如图14-3所示。

图14-3 焦点事件实例






