eclipse rcp学习之UI框架(二)

1.基本认识

我们知道,Eclipse RCP是富客户端开发,那么认识其UI框架是绕不开的一步。这里我们先研究学习下其UI框架。
由于Eclipse RCP目前市面上用得不多,加之时间有限,那么这里我的学习思路是俯瞰了解整体,后续有用到的地方,再深入研究。

还是先看下面两张图:
在这里插入图片描述
在这里插入图片描述

这里我们可以看到,应用程序整个窗口叫做Workbench(工作台)。workbench是由SWT、JFace绘制而成。

涉及下面几个jar包:

org.eclipse.swt
org.eclipse.jface
org.eclipse.ui
org.eclipse.ui.workbench

可以大致理解为:
SWT 是Eclipse中的窗口小部件工具箱。(对比Sun的AWT与Swing。)
JFace对SWT进行了封装,JFace = SWT + MVC

2.常用组件

有了基本认识,那么接下来就是学习具体的组件。下图是一些常用组件、布局等涉及的类间继承关系,先有个大致印象:
在这里插入图片描述
最顶层的Widget是一个抽象类,定义了控件的基本属性,Contorl实现Drawable接口,由Control往下,衍生出了各样式的控件。

2.1 Label

Label是一个标签类,用于显示文字。

基本使用:

Label label = new Label(parent, SWT.NONE);
label.setText("label");

这里注意,新构造一个控件,逐级调用构造函数,最终调用的是 Widget (Widget parent, int style) ,需要传入两个参数:第一个参数parent,表明它属于哪个控件,或者说在哪个控件上显示,第二个参数style,表明该控件的风格,比如具有边框SWT.BORDER。

2.2 Button

Button是按钮类。

基本使用:

Button btn = new Button(parent,SWT.PUSH);
btn.setText("push");

代码展示的是一个普通按钮。SWT中,Button分为以下几种:

SWT.PUSH // 普通按钮
SWT.CHECK // 复选框按钮
SWT.RADIO // 单选按钮
SWT.TOGGLE // 带状态的普通按钮
SWT.ARROW // 箭头按钮
SWT.FLAT // 扁平按钮
SWT.BORDER // 带边框的按钮

分别对应下图:
在这里插入图片描述

对于按钮来讲,事件是不可或缺的:

		btn.addMouseListener(new MouseListener() {

			@Override
			public void mouseDoubleClick(MouseEvent e) {
				System.out.println("双击 " + e.button);
			}

			@Override
			public void mouseDown(MouseEvent e) {
				System.out.println("单击 " + e.button);
			}

			@Override
			public void mouseUp(MouseEvent e) {
				System.out.println("up " + e.button);
			}
			
		});

其它事件listener见下文。

2.3 Text

Text是文本显示,由继承关系图中可以看到,Text继承自Scrollable,具有可滚动属性。

基本使用:

Text text = new Text(parent,SWT.BORDER);
	
Text text2 = new Text(parent,SWT.BORDER|SWT.PASSWORD);// 密码显示
	
Text text3 = new Text(parent,SWT.BORDER|SWT.READ_ONLY);// 只读
text3.setText("Read only");

// 多行显示 垂直滚动
Text text4 = new Text(parent,SWT.BORDER|SWT.MULTI|SWT.WRAP|SWT.V_SCROLL);
text4.setLayoutData(new GridData(GridData.FILL_BOTH));

对应下图:
在这里插入图片描述

2.4 Combo

Combo是下拉框列表。

基本使用:

String[] items = {"Java","C++","Python"};
Combo combo = new Combo(parent,SWT.DROP_DOWN);
combo.setItems(items);
	
Combo combo2 = new Combo(parent,SWT.SIMPLE);
combo2.setItems(items);

对应下图:
在这里插入图片描述
第一种风格是点击向下小箭头,弹出下拉框,第二种风格是在控件下方直接显示下拉框。

2.5 List

List是列表控件。

基本使用:

String[] items = {"Java","C++","Python","Mysql","Oracle","C#"};
List list = new List(group,SWT.BORDER);
list.setItems(items);
	
List list2 = new List(group,SWT.BORDER|SWT.MULTI);
list2.setItems(items);

String[] items = list.getSelection(); // 获取所选择的项

对应下图:
在这里插入图片描述
一个单选,一个多选。

3.常用事件

有了控件,那么就必定会有对应的事件。事件不区分控件。
下面是事件的大致分类:

  • 鼠标事件
  • 键盘事件
  • 焦点事件
  • 选择组事件
  • 窗口控制事件
  • 其它

3.1 鼠标事件

MouseListener 鼠标的点击事件
定义:

public interface MouseListener extends SWTEventListener
public interface SWTEventListener extends EventListener(package org.eclipse.swt.internal)
public interface EventListener (package java.util)

基本使用:

// 可用于Button控件
btn.addMouseListener(new MouseListener() {
	@Override
	public void mouseDoubleClick(MouseEvent e) {
		//e.button :1 左键 2 中键 3 右键
		System.out.println("双击 " + e.button);
	}
	
	@Override
	public void mouseDown(MouseEvent e) {
		System.out.println("单击 " + e.button);
	}

	@Override
	public void mouseUp(MouseEvent e) {
		System.out.println("up " + e.button);
	}
});

MouseMoveListener 鼠标的移动事件
定义:

public interface MouseMoveListener extends SWTEventListener

基本使用:

btn.addMouseMoveListener(new MouseMoveListener() {
	@Override
	public void mouseMove(MouseEvent e) {
		System.out.println( e.x + "," + e.y);
	}
});

MouseTrackListener 鼠标轨迹事件
定义:

public interface MouseTrackListener extends SWTEventListener

基本使用:

btn.addMouseTrackListener(new MouseTrackListener() {

	@Override
	public void mouseEnter(MouseEvent e) {
		// 鼠标进入
		System.out.println("mouseEnter");
	}

	@Override
	public void mouseExit(MouseEvent e) {
		// 鼠标悬停
		System.out.println("mouseExit");
	}

	@Override
	public void mouseHover(MouseEvent e) {
		// 鼠标退出
		System.out.println("mouseHover");
	}
		
});

3.2 键盘事件

定义:

public interface KeyListener extends SWTEventListener

基本使用:

// 可用于Text控件
text.addKeyListener(new KeyListener(){
	@Override
	public void keyPressed(KeyEvent e) {
		// 键按下
		System.out.println("keyPressed: " + e.character);
	}

	@Override
	public void keyReleased(KeyEvent e) {
		// 键松开
		System.out.println("keyReleased: " + e.character);
	}
});

3.3 焦点事件

定义:

public interface FocusListener extends SWTEventListener

基本使用:

text.addFocusListener(new FocusListener() {
	@Override
	public void focusGained(FocusEvent e) {
		// 获得焦点
		System.out.println("focusGained");
	}
	@Override
	public void focusLost(FocusEvent e) {
		// 失去焦点
		System.out.println("focusLost");
	}
});

3.4 选择组件事件

// 可用于List 
list.addSelectionListener(new SelectionListener() {
	@Override
	public void widgetSelected(SelectionEvent e) {
		System.out.println("select:" + list.getSelection()[0]);
	}
	@Override
	public void widgetDefaultSelected(SelectionEvent e) {
	}
});

3.5 窗口控制事件

ControlListener
定义:

public interface ControlListener extends SWTEventListener

基本使用:

parent.addControlListener(new ControlListener() {
	@Override
	public void controlMoved(ControlEvent e) {
		System.out.println("controlMoved");
	}
	@Override
	public void controlResized(ControlEvent e) {
		System.out.println("controlResized");
	}
});

3.6 其它

VerifyListener
定义:

public interface VerifyListener extends SWTEventListener

基本使用:

Text text = new Text(parent,SWT.BORDER);
text.addVerifyListener(new VerifyListener() {
	@Override
	public void verifyText(VerifyEvent e) {
		e.doit = false;
		char c = e.character;
		// 文本框中只允许输入字符0
		if(c == '0') {
			e.doit = true;
		}
	}
});

上面代码可以对Text做一个输入限制。

至此,我们对UI控件的创建使用及其事件,有了一个基本的认识。
下篇学习控件的布局、容器等的使用,用于构建复杂的界面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值