JAVA笔记--初探SWT-3-事件处理

SWT的时间模型和JAVA标准的AWT基本相同 事件产生处的SWT组件成为事件源,对事件作出具体动作成为监听器(Listener)监听其负责监听组件上的事件,并对发生的事件进行处理。基本的模式是将一个监听器添加到已经创建的组件中,当相应的事件发生时,监听器的代码就会被执行。


SWT的常用事件

每一类型的监听器,都有一个接口来定义这种监听器,由类提供时间信息,由应用程序接口方法负责添加监听器,如果一个监听器接口中定义了多个方法,则会提供一个适配器来实现监听器接口并同时提供空方法。所有的事件,监听器和适配器都放在包org.eclipse.swt.events中

常用事件:

1.addMousseListener 鼠标监听器

mouseDown()  鼠标按下时触发

mouseUp()  鼠标松开始触发

2.addKeyListener  按键监听器

keyPressed()  当焦点在组件上时,按下键盘任意键时触发 对某些组件(如Button)按回车时不能触发

keyReleased()  按键弹起时触发

3.addSelectionListener  组件选择监听器

widgetSelection()  组件被选择时(单击鼠标 焦点在组件上时按回车键)触发

4.addFocusListener  焦点监听器

focusGained()  得到焦点时触发

focusLost()  失去焦点时触发

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.layout.*;

public class HelloSWT {
	
	public static void main(String[] args) {
	
		Display display = new Display();
		final Shell shell = new Shell(display);
		RowLayout rowlayout = new RowLayout();
		rowlayout.marginWidth = 20;
		rowlayout.marginHeight = 30;
		shell.setLayout(rowlayout);
		shell.setText("SWT事件处理示例");
		
		RowData rowData = new RowData();
		rowData.width = 100;
		rowData.height = 50;

		Text text = new Text(shell,SWT.BORDER|SWT.WRAP);
		text.setLayoutData(rowData);
		text.addMouseListener(new MouseAdapter(){
			public void mouseDoubleClick(MouseEvent e){
				text.setText("文本框中鼠标双击事件发生!");
				MessageBox dialog = new MessageBox(shell,SWT.OK|SWT.ICON_INFORMATION);
				dialog.setText("Double click");
				dialog.setMessage("文本框中鼠标双击事件发生!");
				dialog.open();
			}
		});
		shell.pack();
		shell.open();
		while(!shell.isDisposed()){
			if(!display.readAndDispatch()){
				display.sleep();
			}
		}
		display.dispose();
	}
}

下面是键盘监听器:

在第一个Text中输入文本,敲击回车后,第二个Text中显示与第一个Text中相同内容。

但第一个Text中文本消失,且改变文本再敲回车,第二个Text不会改变 尚不知道怎么解决。

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.graphics.*;

public class HelloSWT {
	static Text text1,text2;
	
	public static void main(String[] args) {
		Display display = new Display();
		Shell shell = new Shell(display);
		GridLayout layout = new GridLayout();
		layout.numColumns = 2;
		shell.setLayout(layout);
		shell.setText("Event demo");
		
		Label label1 = new Label(shell,SWT.RIGHT);
		label1.setText("label1:");
		text1 = new Text(shell,SWT.BORDER|SWT.WRAP);
		GridData gridData1 = new GridData(100,30);
		text1.setLayoutData(gridData1);
		text1.addKeyListener(new KeyAdapter(){
			public void keyPressed(KeyEvent e){
				if(e.keyCode==SWT.CR){
					text2.setText(text1.getText());
				}
			}
		});
		Label label2 = new Label(shell,SWT.RIGHT);
		label2.setText("text2:");
		text2 = new Text(shell,SWT.BORDER|SWT.WRAP);
		GridData gridData2 = new GridData(100,30);
		text2.setLayoutData(gridData2);
		text2.setEditable(false);
		text2.setBackground(new Color(display,205,255,255));
		shell.pack();
		shell.open();
		while(!shell.isDisposed()){
			if(!display.readAndDispatch()){
				display.sleep();
			}
		}
		display.dispose();
	}
}

下面是监听选择组件

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.layout.*;

public class HelloSWT {
	static Display display = new Display();
	static final Shell shell = new Shell(display,SWT.SHELL_TRIM);
	
	public static void main(String[] args) {
		shell.setText("组件选择事件示例");
		Button button = new Button(shell,SWT.PUSH);
		button.setText("请点击我");
		RowLayout layout = new RowLayout();
		layout.marginWidth = 10;
		layout.marginHeight = 10;
		shell.setLayout(layout);
		RowData data = new RowData(80,40);
		button.setLayoutData(data);
		button.addSelectionListener(new SelectionAdapter(){
			public void widgetSelected(SelectionEvent e){
				MessageBox dialog = new MessageBox(shell,SWT.ICON_INFORMATION);
				dialog.setText("组件选择事件");
				dialog.setMessage("你好,SWT世界");
				dialog.open();
			}
		});
		shell.pack();
		shell.open();
		while(!shell.isDisposed()){
			if(!display.readAndDispatch()){
				display.sleep();
			}
		}
		display.dispose();
	}
}

以上示例中,在button.addSelectionListener()方法内部建立了一个匿名内部类,该类继承于SelectionAdapter 在widgetSelected()方法中写下了事件处理的代码。

另一种写法是采用命名内部类。

相应代码改为:

button.addSelectionListener(new MySelectionListener());

并在类HelloSWT中定义内部类

private static final class MySelectionListener extends SelectionAdapter{
		public void widgetSelected(SelectionEvent e){
			MessageBox dialog = new MessageBox(shell,SWT.OK|SWT.ICON_INFORMATION);
			dialog.setText("组件选择事件");
			dialog.setMessage("你好,SWT世界");
			dialog.open();
		}
	}
















你可能感兴趣的:(java,接口,键盘,适配器,应用程序)