`
Jameslyy
  • 浏览: 391368 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SWT Part 7 —— Graphics (绘图)

阅读更多

Graphics

        SWT 提供了一个图形引擎,在小部件(widgets)中绘制图形和显示图像。SWT中小部件已经我们提供了绘制图片、文本、和其他数据的功能,所以不需要图形接口编程已经可以实现足够漂亮的功能。但是,如果需要在应用程序中显示自定制图形,或者需要实现一个自定制的小部件,就需要理解SWT 中的基本的绘制工具对象。

 

1、GC

        图像上下文(graphics context),即GC, 是SWT 图形功能的核心类,它的API提供了SWT所有的绘图能力。

 

        GC可以用来在控件(大多数情况)、图片、显示器(display)上绘制图形,或是为打印机提供绘图功能。当在控件上绘图时,使用控件的 panit event 提供的 GC 来实现,如果是在图片、显示器、或打印机上绘图,必须创建一个 GC,并在使用过后销毁它。

 

        一旦获得一个 GC 对象,就可以设置它的属性,例如颜色、线条宽度和字体样式,来控制GC 所绘制的图形的外观。

GC API 参考手册描述了完整的SWT图形绘制功能。

 

2、字体样式

        FontFontData 类用来控制SWT中的字体样式。

 

        FontData 描述字体样式的特征,可以通过设定字体样式的名字、样式和大小来创建一个FontData对象。FontData 包含查询这些属性的API。因为FontData没有占用任何操作系统资源,所以不需要销毁它。

 

        Font类是绘图API中实际表示字体样式的图形对象,可以通过提供一个Display 对象和FontData对象来创建一个Font 对象,可以在Font对象中获取它的具体的FontData数据。Font对象必须在用完后明确地销毁。

 

3、颜色

        颜色类似于字体,你可以通过提供RGB数据值来创建一个具有所希望颜色的 Color 对象,在使用完毕后必须销毁Color 对象。使用Display的方法 getSystemColor(int),可以获得为操作系统平台预先定义系统颜色对象,使用这种方式获得颜色对象不需要释放。

       SWT color model 这篇文章详细地讨论了有关颜色的问题。

 

4、图像

        ImageImageDataImageLoader 是SWT中操作图形的类。

 

        ImageData 描述图像中的实际的像素,使用 PaletteData 类描述其中具体的颜色值,ImageData 是设备和平台无关的图像的描述数据。ImageLoader 能够以不同文件格式加载和保存 ImageData 对象,SWT目前支持加载和保存图像格式包括BMP(Windows 位图)、JPEG、GIF和PNG。

 

Image 类是绘图API中实际表示图像的图形对象,可以用下面几种方式创建Image对象:

  • 使用 ImageData初始化图像的内容
  • 拷贝一个已存在的图像
  • 从文件中加载一个图像
不管以哪种方式创建Image对象,都要销毁它。

5、图像对象生命周期
        SWT 中用来绘图的大多数图像对象使用了底层系统资源,必须明确的释放资源。之前讨论的关于控件的规则在这里也是使用的——如果你使用构造方法创建了一个SWT的图像对象,就必须在使用过后销毁它,如果是从别的地方获得的SWT图形对象,就不需要销毁。

5.1、创建
        图形对象,例如图形上下文GC、字体样式、颜色和图像,被创建时就被分配了操作系统的资源,使用图像对象的意图决定了创建它们的时刻。

        对于在应用程序中大量使用的图形对象,可以在创建图像部件的时候创建它们,一般采用这种方式创建颜色和字体。其他情况下,在运行时常见图形对象更为合适,例如,可以在处理控件事件的代码中创建一个图形上下文GC,来执行一些运行。

        如果创建自定制的控件,如果是经常使用到图像对象,一般可以在构造方法中创建它们,如果不是经常用到,或者是依赖于一些属性数据,可以在运行时创建。

5.2、绘制
        创建图形对象之后,就可以开始绘制了,有一个原则很重要:必须在一个绘图监听器(paint listener)中执行绘制操作。在实现自定制控件时,只有在很少的情况下会在其他的事件中执行绘制的操作,但是,一般不鼓励使用这种方式。如果需要在处理其他事件的时候绘图,应该优先尝试使用redraw()方法,这个方法会产生一个新的绘图事件。在panit方法之外绘图会让平台上的优化措施失效,引发一些bug,因为在事件队列中已经存在着等待绘图的事件。

       当收到一个绘制事件就可以使用预先配置的GC 在控件中绘制图形了。不要销毁这个 GC,应为你没有创建它。

       在处理绘图事件时,必须沙鸥先创建任何其他的图形对象。下面的代码片段展示了具体的过程,在创建小部件时颜色对象 red 已经创建了,所以这里可以直接使用:
   shell.addPaintListener (new PaintListener () {
      public void paintControl (PaintEvent event) {
         GC gc = event.gc;
         gc.setForeground (red);
         Rectangle rect = event.widget.getClientArea ();
         gc.drawRectangle (rect.x + 10, rect.y + 10, rect.width - 20, rect.height - 20);
         gc.drawString (resHello.getString("Hello_world"), rect.x + 20, rect.y + 20);
      }
   });

5.3、销毁
        每一个直接创建的图形对象在使用结束以后都必须销毁。

        什么时刻销毁图形对象取决于它们是在什么时候创建的。如果是在创建小部件的时候创建的,一般是在小部件上添加一个销毁事件监听器,在小部件销毁的时候销毁图形对象。如果是在绘图的过程中创建,就应该在绘图结束的时候销毁它。

        在下面的代码中,稍微改动了前面展示绘图监听器的代码,在这个例子中,是在绘图的过程中创建和销毁颜色对象red:
    shell.addPaintListener (new PaintListener () {
      public void paintControl (PaintEvent event) {
         GC gc = event.gc;
         Color red = new Color (event.widget.getDisplay (), 0xFF, 0, 0);
         gc.setForeground (red);
         Rectangle rect = event.widget.getClientArea ();
         gc.drawRectangle (rect.x + 10, rect.y + 10, rect.width - 20, rect.height - 20);
         gc.drawString (resHello.getString ("Hello_world"), rect.x + 20, rect.y + 20);
         red.dispose ();
      }
   });
 
附:

 

分享到:
评论

相关推荐

    swt form

    7. SWT在Android中的应用:虽然Android主要使用XML布局和View系统来构建UI,但在某些特定场景下,如桌面应用或嵌入式系统,SWT可用于创建更接近原生的用户体验。 通过深入学习和实践这些知识点,开发者可以有效地...

    swt总结draw2d绘图

    本总结将深入探讨SWT和Draw2D在绘图方面的知识。 1. SWT基础: SWT是一个与操作系统紧密集成的GUI库,它提供了与原生控件相同的外观和行为。SWT通过JNI(Java Native Interface)调用操作系统API,因此其性能优于...

    swt 画图小程序 自由画线 矩形

    import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.layout.GridData;

    swt-64.rar_64位swt_64的SWT_SWT64_swt.jar 64位_swt64位

    标题“swt-64.rar_64位swt_64的SWT_SWT64_swt.jar 64位_swt64位”表明这个压缩包包含了适用于64位Windows操作系统的SWT库。描述中提到的“64位windows操作系统使用的SWT库”进一步确认了这一点。 SWT的设计目标是...

    swt designer6.9.5 破解版 for eclipse3.5 part4

    swt designer 6.9.5 part4 of part4介绍见part1

    java swt自定义控件

    import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; public class CustomButton extends Button { private Image image; public ...

    org.eclipse.swt.win32

    org.eclipse.swt.graphics.ImageLoaderListener.class org.eclipse.swt.graphics.LineAttributes.class org.eclipse.swt.graphics.PaletteData.class org.eclipse.swt.graphics.Path.class org.eclipse.swt.graphics...

    SWTDesigner_v7.4.0_for_Eclipse3.5.part2

    SWTDesigner_v7.4.0_for_Eclipse3.5.part2

    SWTDesigner_v7.6.0_for_Eclipse3.6_Part2

    7. **兼容性**:SWTDesigner v7.6.0是为Eclipse 3.6定制的,意味着它与该版本的Eclipse有很好的兼容性,确保开发者能在稳定可靠的环境中工作。 "plugins_1"这个文件可能是SWTDesigner插件的一部分,通常Eclipse插件...

    swt-arm64.jar.zip

    在本案例中,我们关注的是SWT的arm64版本——`swt-arm64.jar`,这是一个专为国产化服务器架构设计的库,适用于飞腾服务器和麒麟服务器等基于ARM64架构的系统。 在传统的Java GUI开发中,开发者通常会使用AWT或Swing...

    图形上下文导论(Introduction to SWT Graphics)

    在SWT(Standard Widget Toolkit)中,图形上下文(Graphics Context,简称GC)是用于在各种可绘制对象上进行绘图操作的核心组件。`org.eclipse.swt.graphics.GC`类封装了一系列的API,允许开发者进行线条绘制、图形...

    Eclipse SWT 开发参考

    - **org.eclipse.swt.graphics**: 包含了用于绘图的类和接口。 - **org.eclipse.swt.events**: 定义了事件处理相关的类和接口。 #### 4. SWT实例编程 SWT提供了丰富的UI组件,以下是一些常用组件的简要介绍: - *...

    swt designer 7.4 for eclipse 3.4 附破解文件.part2

    swt designer 7.4 for eclipse 3.4 part2

    SWT教程java开发文档

    **SWT教程——Java开发中的图形用户界面设计** SWT(Standard Widget Toolkit)是Java编程环境中用于构建桌面应用程序的一种GUI库。它由Eclipse基金会维护,是Eclipse IDE的基础组件之一,提供了丰富的用户界面控件...

    MyEclipse8.6中安装SWT.part2

    这是第二个压缩包,如果你不下就解不开啊 这是第二个压缩包,如果你不下就解不开啊

    swt-win32-3235

    2. swt-gdip-win32-3235.dll:这个文件是SWT对GDI+(Graphics Device Interface Plus)的支持,GDI+是Windows图形编程接口,提供了更高级的绘图功能,如矢量图形和图像处理。 3. swt-wgl-win32-3235.dll:这个文件...

    SWT配置 SWT配置 SWT配置 SWT配置 SWT配置

    ### SWT配置详解 #### 一、SWT简介与配置的重要性 SWT(Standard Widget Toolkit)是一种用于构建基于Java的应用程序的图形用户界面工具包。它提供了丰富的控件集,并能够生成本地外观和感觉的界面,这使得应用在...

    swt资源释放问题

    SWT 中常见的图形资源都继承自 org.eclipse.swt.graphics.Resource。自己创建的图形资源在程序结束时通过该图形资源的 dispose() 方法释放。通过 Display 取得的系统图形资源对象不能释放。 SWT 资源释放问题需要...

    Eclipse SWT JFace核心应用 PDF.part1 of 3

    本书全面介绍了SWT、JFace和RCP的相关知识。全书共分5篇,第1篇介绍了SWT产生的背景以及SWT的一些基本概念和基础知识。第2篇介绍了SWT基本控件的使用,以及事件处理、布局等SWT基本知识的应用。第3篇介绍了关于SWT的...

Global site tag (gtag.js) - Google Analytics