文档章节

第6节:SWT事件处理

websect
 websect
发布于 2016/06/08 22:04
字数 895
阅读 25
收藏 0
点赞 0
评论 0

#SWT事件处理

##SWT事件处理的方法 ###方法1:匿名内部类方式添加按钮被点击事件

		button.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				MessageDialog.openInformation(shell, "hello", "匿名类方式");
			}
		});

###方法2:定义命名内部类 定义内部类

	private static final class ButtonSelectionListener extends SelectionAdapter {
		@Override
		public void widgetSelected(SelectionEvent e) {
			MessageDialog.openInformation(shell, "hello", "命名内部类方式");
		}
	}

调用:

button.addSelectionListener(new ButtonSelectionListener());

###方法3:还可以定义外部类,直接将命名内部类提取出重新生成一个java文件 定义外部类:

package cn.haibin.rcp.test.oscblog;

import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Shell;

/**
 * 定义按钮选择事件类
 * 
 * @author cn.haibin
 *
 */
public class ButtonSelectionListener extends SelectionAdapter {

	Shell shell = new Shell();

	@Override
	public void widgetSelected(SelectionEvent e) {
		MessageDialog.openInformation(shell, "hello", "命名内部类方式");
	}
}

调用

static ButtonSelectionListener buttonSelectionListener = new ButtonSelectionListener();

button.addSelectionListener(buttonSelectionListener);

###方法4:实现监听接口,即让HelloWorld本身继承SelectionAdapter或继承自ButtonSelectionLister接口,再重新或实现相应方法

package cn.haibin.rcp.test.oscblog;

import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

/**
 * 功能说明:继承SelectionAdapter实现按钮单击事件
 * 
 * @author cn.haibin
 *
 */
public class SwtBtnHelloWorld extends SelectionAdapter {

	private static final Shell shell = new Shell(); // shell是程序的主窗口

	@Override
	public void widgetSelected(SelectionEvent e) {
		MessageDialog.openInformation(shell, "hello", "继承SelectionAdapter");
	}

	public static void main(String[] args) {
		final Display display = Display.getDefault();// Display多线程操作负责管理事件循环和控制UI线程和其它线程之间的通信
		shell.setSize(300, 200); // 设置主窗口的大小
		shell.setText("HelloWorld"); // 设置主窗口的标题

		// 创建主窗口的其它界面组件
		Button button = new Button(shell, SWT.NONE); // 创建一个按钮对象
		button.setText("HelloWorld"); // 设置按钮文字
		button.setBounds(100, 50, 100, 50); // 设置按钮在窗体中位置和大小

		shell.layout(); // 应用界面布局
		shell.open(); // 打开shell主窗口

		while (!shell.isDisposed()) {// 如果shell主窗口没有关闭,则一直循环
			if (!display.readAndDispatch())
				display.sleep(); // 如果display不忙,就让display处于休眠状态
		}

		display.dispose(); // 释放display资源
	}
}

##SWT事件处理方法的比较

  • 匿名类 优点:内部类更方便些, 缺点: 1、不适合于写太多的代码,一般不超过十行 2、事件随着组件一起,代码块比较分散,不便于阅读和维护, 3、视觉上显得散乱, 4、无法复用事件处理代码
  • 命名内部类 从代码书写,阅读,维护以及程序的可扩展性来看比较适合推荐
  • 外部类 一般是考虑代码重用才使用;
  • 实现监听接口的方式 一般不建议使用 ##如何在事件方法中访问变量
  • 变量加final修饰符
  • 将变量写成类的实例变量或类变量
  • 将事件写成命名内部类,然后通过构造方法的参数传入 ##最常用的事件监听器
  • addSelectionListener widgetSelected:当组件被选择(单击鼠标、按回车键)时触发此方法的事件处理程序。 widgetDefaultSelected:用于某些很少触发选择事件的组件,在实际开发中很少用。例如:文本框回车事件、列表框双击事件等,只能用:widgetDefaultSelected,用widgetSelected方法无效。
  • addKeyListener keyPressed:当前焦点停在组件时,按下键盘任一键时触发,但对某些控件,如Button,按回车键无法执行此方法 keyReleased:按键弹起时触发。
  • addFocusListener focusGained:得到焦点触发 focusLost:失去焦点出发
  • addMouseListener mouseDown:鼠标按下时触发; mouseUp:鼠标放下时触发 mouseDoubleClick:鼠标双击时触发
  • DisposeListener
    widgetDisposed:当组件被销毁时触发该方法
  • Listener 利用通用监听器可以监听一些组件没有明确提供的事件,一个Listener也可以监听多个事件

© 著作权归作者所有

共有 人打赏支持
websect
粉丝 1
博文 7
码字总数 3310
作品 0
浦东
程序员
细说Java GUI:AWT,SWT,Swing

历史 Internet上有许多围绕这一争论的故事。你可能已经听说过它们中的大多数了,其中之一有助于让你理清头绪,让我们就从这里开始,Amy Fowler是Swing阵营的一个倡导者。 回到上个世纪90年代...

javasql
2014/02/05
0
2
SWT Browser 渲染 HTML 页面内容若干问题的解决方案

简介: 本文介绍了 SWT Browser 渲染定制的 HTML 页面内容中一些常见问题(主要是国际化问题、Accessibility 问题 和平台相关问题)的解决方案。接下来,本文将详细的讲解问题的由来并提供解...

红薯
2010/06/19
3.6K
0
Eclipse e4 的亮点

e4 项目是下一代的 Eclipse。e4 将为流行的基于组件的应用程序和工具提供一个平台。在本文中,我们将学习 e4 中的一些新特性,比如 XWT 和声明性样式处理。XWT 是一个新工具包,可用于在 XM...

violet
2010/01/28
2.4K
7
Eclipse e4 的亮点

e4 项目是下一代的 Eclipse。e4 将为流行的基于组件的应用程序和工具提供一个平台。在本文中,我们将学习 e4 中的一些新特性,比如 XWT 和声明性样式处理。XWT 是一个新工具包,可用于在 XM...

红薯
2010/01/23
1K
1
swing 事件处理机制

Swing的事件处理过程为:事件调度线程(Event Dispatch Thread)从事件队列(EventQueue)中获取底层系统捕获的原生事件,如鼠标、键盘、焦点、PAINT事件等。接着调用该事件源组件的dispachEven...

ensoncto
2014/09/19
0
0
SWT、Swing 或 AWT:哪个更适合您?

在为新应用程序选择 GUI 工具包时应该考虑哪些因素? Barry Feigenbaum (feigenba@us.ibm.com), 编程顾问, IBM 本文通过对 Eclipse 的 SWT 和 Java Swing、Abstract Windows Toolkit(AWT)G...

晨曦之光
2012/03/09
0
0
GUI开发之AWT、SWING、SWT和JFACE的比较

核心提示:AWT Abstract Windows Toolkit(AWT)是最原始的 Java GUI 工具包。在任何一个 Java 运行环境中都可以使用它。 AWT 是一个非常简单的具有有限 GUI 组件、布局管理器和事件的工具包...

AlphaJay
2010/07/23
0
0
《Eclipse从入门到精通》常见问题解答

附录 B  读者提问精选(第二次印刷) 起步篇 问:为什么我的 Swt-Designer 安装总是不成功? 答:将安装步骤要点简述如下: ( 1 )下载 笔者于 2005 年 8 月重新去 http://www.swt-designe...

唐玄奘
2017/12/04
0
0
Android零基础入门第82节:Activity数据回传

上一节学习了将简单的数据从MainActivity传递到SecondActivity,本节一起来学习数据如何从SecondActivity回传到MainActivity。 一、简介 前面己经提到,Activity 还提供了一个 startActivit...

鑫鱻
2017/10/24
0
0
Android零基础入门第85节:Fragment使用起来非常简单

Fragment创建完成后并不能单独使用,还需要将Fragment加载到Activity中,在Activity中添加Fragment的方式有两种:静态加载和动态加载,接下来分别进行学习。 一、静态加载 静态加载Fragment非...

鑫鱻
2017/10/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Android 获取各大音乐平台的真实下载地址

废话 电脑使用谷歌浏览器或者QQ浏览器的时候。。。。。。。说不清楚,还是看图吧 大概意思就是,只要网页上需要播放,只要能播放并且开始播放,这个过程就肯定会请求到相关的音乐资源,然后就...

她叫我小渝
34分钟前
0
0
shell中的函数、shell中的数组、告警系统需求分析

shell中的函数 格式: 格式: function f_name() { command } 函数必须要放在最前面 示例1(用来打印参数) 示例2(用于定义加法) 示例3(用于显示IP) shell中的数组 shell中的数组1 定义数...

Zhouliang6
今天
2
0
用 Scikit-Learn 和 Pandas 学习线性回归

      对于想深入了解线性回归的童鞋,这里给出一个完整的例子,详细学完这个例子,对用scikit-learn来运行线性回归,评估模型不会有什么问题了。 1. 获取数据,定义问题     没有...

wangxuwei
今天
1
0
MAC安装MAVEN

一:下载maven压缩包(Zip或tar可选),解压压缩包 二:打开终端输入:vim ~/.bash_profile(如果找不到该文件新建一个:touch ./bash_profile) 三:输入i 四:输入maven环境变量配置 MAVEN_HO...

WALK_MAN
今天
0
0
33.iptables备份与恢复 firewalld的9个zone以及操作 service的操作

10.19 iptables规则备份和恢复 10.20 firewalld的9个zone 10.21 firewalld关于zone的操作 10.22 firewalld关于service的操作 10.19 iptables规则备份和恢复: ~1. 保存和备份iptables规则 ~2...

王鑫linux
今天
2
0
大数据教程(2.11):keeperalived+nginx高可用集群搭建教程

上一章节博主为大家介绍了目前大型互联网项目的系统架构体系,相信大家应该注意到其中很重要的一块知识nginx技术,在本节博主将为大家分享nginx的相关技术以及配置过程。 一、nginx相关概念 ...

em_aaron
今天
1
0
Apache Directory Studio连接Weblogic内置LDAP

OBIEE默认使用Weblogic内置LDAP管理用户及组。 要整理已存在的用户及组,此前办法是导出安全数据,文本编辑器打开认证文件,使用正则表达式获取用户及组的信息。 后来想到直接用Apache Dire...

wffger
今天
2
0
HFS

FS,它是一种上传文件的软件。 专为个人用户所设计的 HTTP 档案系统 - Http File Server,如果您觉得架设 FTP Server 太麻烦,那么这个软件可以提供您更方便的档案传输系统,下载后无须安装,...

garkey
今天
1
0
Java IO类库之BufferedInputStream

一、BufferedInputStream介绍 /** * A <code>BufferedInputStream</code> adds * functionality to another input stream-namely, * the ability to buffer the input and to * sup......

老韭菜
今天
0
0
STM 32 窗口看门狗

http://bbs.elecfans.com/jishu_805708_1_1.html https://blog.csdn.net/a1985831055/article/details/77404131...

whoisliang
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部