Display对象代表了程序级的SWT各个类和底层系统窗口连接的实现。Display类是和操作系统相关的,针对不同的系统,可能相应的会增加一些API。这里我们只讨论一些所有平台都适用的API。
一 般而言,每个程序都只需要一个,并且只有一个Display对象(这对于一些低级别窗口系统而言的限制)。创建Display对象的线程,默认情况,执行 事件循环,就是我们知道的用户接口线程。我们可以通过这个线程调用很多控件的方法。其他接近这些成员的线程都将导致一个 SWT.ERROR_THREAD_INVALID_ACCESS类型的异常。
这个类的最重要的任务之一就是事件处理机制。Display类维护着注册的事件监听器,从低级别操作系统的事件队列中读取事件,并将这些事件传递给相应的事件监听器来完成具体的实现。
SWT中的事件处理机制有两个级别。最低的级别,监听器通过Display对象将一个指明类型的事件注册。当相应的事件发生了,监听器的handleEvent()方法就被调用。虽然这个方法不是很文雅,但是效率非常高。
在更高一个级别,EventListeners的类型实现通过不同的事件发生。不同的类通过实现EventListener的子接口来注册事件。这个系统更文雅,有粒度和面向对象的,但是对系统有更高的要求。
一般情况下,创建Display对象是的构造函数是没有参数的;也可以通过DeviceData来创建一个对象,这样对调试更有用。察看Table 3-1了解对Display构造函数的描述。
Table 3-1: Display 构造函数
构造函数 描述
public Display() 创建一个新的Display对象,设置当前线程为用户接口线程。你会经常在程序中使用这个构造函数或者Display.getDefault()。
public Display(DeviceData data) 创建一个新的Display对象,设置DeviceData为Display成员。使用DeviceData在某些低级别的调试和错误配置上。
Display也有一些方法,某些方法可以被适当的忽略(beep(),别的?)。Table 3-2列举了Display的方法。
Table 3-2: Display 方法
方法 描述
void addFilter(int eventType, Listener listener) 添加一个监听器,如果有通过eventType指定的事件发生了,将通知监听器。
void addListener(int eventType, Listener listener) 添加一个监听器,如果有通过eventType指定的事件发生了,将通知监听器。
void asyncExec(Runnable runnable) 给一个无用户接口线程调用SWT控件类的受保护的方法的能力。用户接口线程执runnable的下一个“合理的机会”的代码(调用run()方法)。这 个方法会立即返回,察看syncExec()。
void beep() 发出一个声音。
void close() 关闭这个display。
void disposeExec(Runnable runnable) 注册一个Runnable对象,他的run()方法会在display释放掉后执行。
static Display findDisplay (Thread thread) 分配一个用户接口线程,这个方法返回联系的Display对象。如果分配的不是用户接口线程,那么方法返回null。
Widget findWidget(int handle) 返回一个指定句柄的控件,如果没有就返回null。
Shell getActiveShell() 返回当前活动的Shell,如果当前程序没有活动的shell则返回null。
Rectangle getBounds() 返回display的大小和位置。
Rectangle getClientArea() 返回当前display可用的显示数据的一部分。
static Display getCurrent() 如果当前的执行线程是用户接口线程,则返回于它有关的Display对象。如果当前的线程不是有特权的用户接口线程,方法返回null。
Control getCursorControl() 如果鼠标或者其他指示设备越过当前程序的一部分,返回一个指向这个控件的引用;否则返回null。
Point getCursorLocation() 返回相对于屏幕左上角而言屏幕上的指针的位置。
Point[] getCursorSizes() Object getData() 返回推荐的指针大小。返回程序指定的display中数据集。
Object getData(String key) 返回程序指定的display中以key为关键字的数据集。
static Display getDefault() 返回程序默认的display。如果没有创建的display,这个方法将创建一个,并将当前线程标记为用户接口线程。副作用就是线程作为陈程序的事件循环的用户接口线程。
int getDismissalAlignment() 返回默认的对话框中的按钮的排列,是SWT.LEFT或者SWT.RIGHT。
int getDoubleClickTime() 设置鼠标双击事件的两次点击的最大时间间隔。
Control getFocusControl() 返回当前程序具有焦点的的控件。如果没有控件有焦点,返回null。
int getIconDepth() 返回当前display的icon的深度。
Point[] getIconSizes() 返回推荐的icon的大小。
Monitor[] getMonitors() 返回与当前display有关的监视器。
Monitor getPrimaryMonitor() 返回当前display的主要监视器。
Shell[] getShells() 返回与当前Display有关的活动的shell的数组。
Thread getSyncThread() 如果用户接口线程正在执行一个相关的Runnable对象,通过syncExec()方法调用,这个方法将返回一个对当前线程的引用。否则,这个方法返回null。
Color getSystemColor(int id) 返回一个在SWT类中定义的与系统匹配的颜色。如果没有颜色与id匹配,方法返回黑色。记住这是一个系统颜色-当你完成这里后,不需要释放。
Font getSystemFont() 返回一个系统字体的引用(不应该被释放),这个字体可以使用在当前环境。一般的,控件在创建后就有相一致的字体与它关联,我们很少去需要改变它来维护正确的系统表现。
Thread getThread() 返回当前display的用户接口线程。创建Display的线程就是用户接口线程。
Point map(Control from, Control to, int x, int y) 将一个控件指定的部分映射到另一个控件的相应的部分。
Rectangle map(Control from, Control to, int x, int y, int width, int height) 将一个控件的指定矩形区域映射到另一个空间的相应区域。
Point map(Control from, Control to, Point point) 将一个控件指定的部分映射到另一个控件的相应的部分。
Point map(Control from, Control to, Rectangle rectangle) 将一个控件的指定矩形区域映射到另一个空间的相应区域。
boolean readAndDispatch() 这是SWT系统中的一个重要的事件方法。他读取事件,一次一个从事件消息队列的读取。在获得了事件后,他将根据具体的事件调用相应的注册了的监听器。如 果没有事件在消息队列,readAndDispatch()就执行任何经过display注册了的syncExec()或者asyncExce()的请 求,通知任何的syncExec的线程完成请求。这个方法返回true,如果消息队列中还有事件需要执行,否则返回false。返回false允许调用的 线程释放CPU资源直到又有新的时间事件需要处理。
void removeFilter(int eventType, Listener listener) 移除指明的事件监听器的通知列表中的指定的事件类型。
void removeListener(int eventType, Listener listener) 移除指明的事件监听器的通知列表中的指定的事件类型。
static void setAppName (String name) 设定程序的名字。
void setCursorLocation (int x, int y) 以屏幕左上角为基点,设定屏幕上的指针在指定的位置。
void setCursorLocation (Point point) 以屏幕左上角为基点,设定屏幕上的指针在指定的位置。
void setData(Object data) 设置指定程序的数据。
void setData(String key, Object data) 根据指定的key设定程序的数据。
void setSynchronizer (Synchronizer synchronizer) 设定当前display的同步器。
boolean sleep() 允许用户接口线程放弃CPU时间,直到有新的事件需要处理或者被别的手段唤醒;比如wake()。这允许系统处理事件更加有效,因为只有当处理事件时才消耗CPU资源。
void syncExec(Runnable runnable) 同asyncExec(),这个方法给了非用户接口线程调用SWT各类中的受保护方法的能力。用户接口线程执runnable的下一个“合理的机会”的 代码(调用run()方法)。这个方法在执行了Runnable中的run()方法后返回。
void timerExec(int milliseconds, Runnable runnable) 注册一个Runnable对象,用户接口线程在指定的延时后运行。
void update() 使得所有未决的绘制请求都被处理。
void wake() 唤醒调用了sleep()的用户线程。可以被任何的线程调用。
尽管一个Display对象是GUI的基本窗体,但是他不代表任何屏幕上的图形控件。实际上,Display什么东西都不显示。你必须创建一个窗口,通过Shell对象。这就带领我们到下一部分,那里我们将讨论Shells。
了解Display对象
最新推荐文章于 2022-03-30 16:49:47 发布