,但是为了能够通过编译器的编译,我却不得不写一个空白的widgetDefaultSelected()方法(因为SelectionListener是一个接口,你必须实现它所有的方法)。
幸运的是,swt帮我们解决了这个问题,途径就是使用adapter。在swt中,对应于一个XyzListener都有一个XyzAdapter,adapter都是抽象类并且实现了对应的listener接口,它为对应listener接口中的每个方法都定义了一个默认实现(基本上就是什么都不做),我们在使用时候只需要override掉自己感兴趣的方法就可以了。
结合上一小节中的代码,如果使用SelectionAdapter代替SelectionListener的话,我们的代码就可以这样写:
button.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent event) {
handleSelectionEvent();
}
});
这样是不是很方便呢?
EventObject:事件处理的附加信息
在处理各种事件时,我们需要一些附加信息,而EventObject给我们提供了这些信息。
我们先来看下面这个简单的小程序,在这段程序中,我们创建了两个文本框,当在第一个文本框输入时,第二个文本框中显示输入的字符。
1 public class EventDemo2 {
2
3 Text logText;
4
5 public EventDemo2() {
6 Display display = new Display();
7 Shell shell = new Shell(display,SWT.SHELL_TRIM);
8
9 GridLayout layout=new GridLayout();
10 layout.numColumns=2;
11 shell.setLayout(layout);
12 shell.setText("Event demo");
13
14 Label label1=new Label(shell,SWT.RIGHT);
15 label1.setText("text1:");
16 Text text1=new Text(shell,SWT.NONE);
17
18 text1.addKeyListener(new KeyAdapter(){
19 public void keyPressed(KeyEvent e) {
20 Text t=getLogText();
21 String s=t.getText();
22 t.setText(String.valueOf(e.character));
23 }
24 }
25 );
26
27 Label label2=new Label(shell,SWT.RIGHT);
28 label2.setText("text2:");
29 Text text2=new Text(shell,SWT.NONE);
30 text2.setEditable(false);
31 text2.setBackground(new Color(display,255,255,255));
32 setLogText(text2);
33
34 shell.pack();
35 shell.open();
36
37 while (!shell.isDisposed()) {
38 if (!display.readAndDispatch()) {
39 display.sleep();
40 }
41 }
42 display.dispose();
43 }
44 /**
45 * @param args
46 */
47 public static void main(String[] args) {
48 EventDemo2 demo2=new EventDemo2();
49 }
50 /**
51 * @return Returns the logText.
52 */
53 public Text getLogText() {
54 return logText;
55 }
56 /**
57 * @param logText The logText to set.
58 */
59 public void setLogText(Text logText) {
60 this.logText = logText;
61 }
62 }
63
SWT/JFace入门指南之让SWT程序动起来(3)
时间:2011-01-04
代码段 7
你可能没有兴趣仔细研究这么长的代码,那么让我们只关注这一小段代码:
text1.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e) {
Text t=getLogText();
String s=t.getText();
t.setText(String.valueOf(e.character));
}
}
);
在这段代码中,我们使用了KeyAdapter来处理键盘事件,而keyPressed会在有键按下时候被调用,我们在函数中使用了KeyEvent类型的参数e,并且通过e.character得到了按下键对应的字符。
各种EventObject(例如上面示例中的KeyEvent)在事件处理函数中作为参数出现,它们可能有不同的属性和方法,利用这些特性我们可以做很多有意思的事情。
我们下面只简单介绍几种EventObject,它们分别是对应于窗口事件(ShellListener,Sh |