SWT编程基础-控件和图形资源

控件

在SWT中,所有的控件都是从org.eclipse.swt.widgets.Control继承而来,如图所示:
SWT编程基础-控件和图形资源_第1张图片

最上层的Widget类直接继承自Object,是SWT中所有和窗口相关的部件的父类,它为所有窗口组件提供了创建对象(申请资源)、释放资源和事件监听的功能。
Widget有两个比较重要的子类,Control类是所有控件的父类,而Item类则是控件的辅助部分,代表了复杂控件中的某一项。
Button、Label等简单控件都直接继承自Control控件,Scrollable代表拥有滚动条的控件,它的子类有Text和Composite等。Composite是容器控件,这类控件可以将容纳于其中的其他控件在界面上分组摆放。
Canvas是允许程序员使用画点、线等基本图形在其中直接绘图的控件。Shell间接集成自Canvas类。

我们可以用Control(Control parent,int style)来构建一个控件实例,其中第一个参数指明了控件的父资源,第二个参数是控件使用的样式。构造控件时,必须指定控件的父资源。样式控制着控件很多方面的显示和行为方式,它们可以按照用途被归类成不同的组,同属一组的样式应用时只能选择一个。
控件也会占用系统资源,这部分资源的分配是在控件的构造函数中完成的。当一个控件的dispose方法调用后,它所占用的系统资源将被释放,但是控件所对应的Java对象依然存在,如果UI线程试图对这个已经释放的控件进行操作,会得到“空间已呗释放”的异常。所以我们最好不要手动释放一个控件,而应该交由SWT系统自动释放它们。

图形资源

Color

org.eclipse.swt.graphics.Color类管理着操作系统中的颜色资源。对于一些常用的颜色,我们可以自己创建,也可以使用Display.getSystemColor方法获得,需要注意的是,对于我们自己创建的颜色资源在使用完后需要调用display方法释放资源,而通过Display.getSystemColor方法获得的颜色资源我们不应该释放它,避免其他位置引用出错。

package swt;

import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.junit.Test;

public class ColorTest
{
   @Test
   public void test()
   {
      Display display = Display.getDefault();
      Shell shell = new Shell(display);
      shell.setSize(300, 150);
      Color red = new Color(display, 255, 0, 0);
      //display.getSystemColor(SWT.COLOR_RED);
      shell.setBackground(red);
      shell.open();
      while (!shell.isDisposed())
      {
         if (!display.readAndDispatch())
         {
            display.sleep();
         }
      }
      red.dispose();
      display.dispose();
   }
}

运行结果:

SWT编程基础-控件和图形资源_第2张图片

Image

如果希望设置窗口的图标或在窗口中显示一幅图片,需要用到Image类,一个Iamge对象就代表一个可用的图片信息。目前,SWT可以直接读取的图像文件格式有:BMP、ICO、JPEG、GIF、PNG和TIFF。除了使用Image类来构造一个图片外,我们还可以使用ImageData类,ImageData包含设备无关的图像文件信息,如图像的尺寸、每个像素的颜色等。
在Display中也内置了几个常用的Image对象,包括错误图标、警告图标等,我们可以通过Display.getSystemImage方法获取它们,和Color一样,我们自己创建的图像资源使用完成后需要手动释放。

package swt;

import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.junit.Test;

public class ImageTest
{
   @Test
   public void test()
   {
      Display display = Display.getDefault();
      Shell shell = new Shell(display);
      shell.setSize(300, 150);
      Image image =display.getSystemImage(SWT.ICON_ERROR);
      shell.setImage(image);
      shell.open();
      while (!shell.isDisposed())
      {
         if (!display.readAndDispatch())
         {
            display.sleep();
         }
      }
      display.dispose();
   }
}

运行结果:

SWT编程基础-控件和图形资源_第3张图片

你可能感兴趣的:(JAVA)