zoukankan      html  css  js  c++  java
  • 第三章 第二节 剖析代码

    第二节  剖析代码

    返回目录

    下面几行代码表明需要引入(import)哪些包:

    import org.eclipse.swt.widgets.Display;

    import org.eclipse.swt.widgets.Shell;

    import org.eclipse.swt.widgets.Label;

    import org.eclipse.swt.SWT;

    大多数使用SWT的类都要引入SWT对象和swt.widgets包内的一些对象。

    下面两行创建了Display对象和Shell对象:

    Display display = new Display();

    Shell shell = new Shell(display);

    在较高的层次,Display对象代表了底层的视窗系统。与Display对象一起创建的Shell对象,是顶层(top-level)窗口的抽象。对于类DisplayShell的详细介绍在本章后面。

    接着,下面的代码创建了label控件:

    Label label = new Label(shell, SWT.CENTER);

    label.setText("Hello, World");

    label.setBounds(shell.getClientArea());

    Label对象既可以显示简单的文本,像您在这里看到的,又可以显示图片。这个控件通过对Shell对象的引用而被创立。Shell间接继承自复合类(Composite class)。复合类能容纳其他的控件(control)。当SWT看到这行代码,它会在相关的复合对象中,创建label控件的底层视窗系统的实现[1]

    显示窗口,调用:

    shell.open();

    它告诉底层系统,把当前的shell设为可见,把焦点(focus)移到默认的按钮(如果有)上,最后激活与shell关联的窗口。它将窗口显示出来,并且允许窗口接收底层视窗系统的事件(event)

    这个程序的主循环为:

    while (!shell.isDisposed())

    {

     if (!display.readAndDispatch())

     {

      display.sleep();

     }

    }

    在每个SWT程序中都有类似的循环。在这个循环里,首先检查用户没有关闭这个主窗口。因为这个窗口还开着,接着检查消息队列,看看有没有视窗系统或程序的其它部分产生的消息(message)。如果队列中没有任何事件,休息一下,等待下一个事件的到来。当下一个事件到来,重复这个循环,别忘了先检查这个事件不是关闭主窗口。

    最后,调用display.dispose();窗口已被关闭(用户关闭了这个窗口),不再需要视窗系统的资源来显示图形组件。作为一个良好的“电脑公民”,现在该把这些资源还给系统了。


    [1] 译注:原文When SWT encounters this line, it knows to create the underlying windowing system's implementation of the label widget on the associated Composite object.

     

    返回目录

  • 相关阅读:
    HDU 1058 Humble Numbers
    HDU 1421 搬寝室
    HDU 1176 免费馅饼
    七种排序算法的实现和总结
    算法纲要
    UVa401 回文词
    UVa 10361 Automatic Poetry
    UVa 537 Artificial Intelligence?
    UVa 409 Excuses, Excuses!
    UVa 10878 Decode the tape
  • 原文地址:https://www.cnblogs.com/ols/p/2173299.html
Copyright © 2011-2022 走看看