`
lokinell2006
  • 浏览: 5845 次
  • 来自: ...
最近访客 更多访客>>
社区版块
存档分类
最新评论

SWT&JFace学习笔记1

阅读更多

SWT Graphics and Image Handling

 

在SWT里,所有实现接口org.eclipse.swt.graphics.Drawable的类都能做Drawing的操作。

  • Control
  • Image
  • Device(Display, Printer)

 

Drawing Graphics的基本步骤如下:

  1. 从目标Drawable Object上得到Graphic Context 实例
  2. 在Graphic Context上操作drawing
  3. Dispose the Graphic Context

示例code fragments for drawing on controls:

   Fragment1:

 progressBar.addPaintListener(new PaintListener() {
            public void paintControl(PaintEvent e) {



                // The string to draw.
                String string = (progressBar.getSelection() * 1.0 /
                 (progressBar.getMaximum()-progressBar.getMinimum()) * 100) + "%";

                Point point = progressBar.getSize();
                Font font = new Font(shell.getDisplay(),"Courier",10,SWT.BOLD);
                e.gc
.
setFont(font);
                e.gc.setForeground(
                   shell.getDisplay().getSystemColor(SWT.COLOR_WHITE));

                FontMetrics fontMetrics = e.gc.getFontMetrics();
                int stringWidth =
                   fontMetrics.getAverageCharWidth() * string.length();
                int stringHeight = fontMetrics.getHeight();
                
                e.gc.drawString(string, (point.x-stringWidth)/2 ,
                   (point.y-stringHeight)/2, true);



                // Remember to dispose it, because you created it by calling 
                // constructor.

                font.dispose();
            }
        });

  Code Fragment2

 Display display = new Display();
    Shell shell = new Shell(display);
    shell.setLayout(new GridLayout(2, true));

    Image image = new Image(display, "icons/eclipse.gif");

    // Clones the image.
    Image image2 = new Image(display, image.getImageData());

    // Draws an oval
    GC gc = new GC(image2);
    gc.setForeground(display.getSystemColor(SWT.COLOR_WHITE));
    gc.drawOval(10, 10, 90, 40);
    gc.dispose();

    CLabel label = new CLabel(shell, SWT.NULL);
    label.setImage(image);
    label.setBounds(10, 10, 130, 130);

    CLabel label2 = new CLabel(shell, SWT.NULL);
    label2.setImage(image2);
    label2.setBounds(150, 10, 130, 130); 

 

Using Canvas:

// You can optionally specify one or more of its painting configuration styles,
// SWT.NO_BACKGROUND | SWT.NO_REDRAW_RESIZE | SWT.NO_MERGE_PAINTS etc.


Canvas canvas = new Canvas(shell, SWT.NULL);
    canvas.setBounds(10, 10, 200, 100);

    canvas.addPaintListener(new PaintListener() {
        public void paintControl(PaintEvent e) {
            e.gc.drawRoundRectangle(10, 10, 180, 80, 10, 10);
        }
    });

 In SWT, graphics objects live in a plane defined by Cartesian coordinates, where the origin is at the topleft corner (0, 0), the x axis increases from left to right, and the y axis increases from top to bottom.

 如果你熟悉Java2D,你可以很容易理解如何使用SWT里的drawing methods

 

你可以使用SWT的做图API来

  • Drawing Lines, Arcs, and Shapes

  • Filling Shapes

  • Drawing and Copying Images

  • Drawing Text

  • Clipping & XOR & Double Buffering

           Clipping is a technique used to limits the extent of a drawing.

final Canvas canvas = new Canvas(shell, SWT.NULL);
    final Image image = new Image(display, "icons/eclipse.gif");
    canvas.addPaintListener(new PaintListener() {
        public void paintControl(PaintEvent e) {
            Region region = new Region(); // A triangle region.
            region.add(new int[]{60, 10, 10, 100, 110, 100});
            e.gc.setClipping(region);

            e.gc.drawImage(image, 0, 0);
        }
    });
 

           Double buffering works in this way: Instead of drawing graphics directly to the graphics context of a canvas, you draw graphics objects on an image and then draw the image to the canvas.

 final Canvas doubleBufferedCanvas = new Canvas(shell, SWT.NO_BACKGROUND);

    doubleBufferedCanvas.addPaintListener(new PaintListener() {
        public void paintControl(PaintEvent e) {
            // Creates new image only when absolutely necessary.
            Image image = (Image) doubleBufferedCanvas  .getData("double-buffer-image");
            if (image == null
                || image.getBounds().width != canvas.getSize().x
                || image.getBounds().height != canvas.getSize().y) {
                image =
                   new Image(
                       display,
                       canvas.getSize().x,
                       canvas.getSize().y);
                doubleBufferedCanvas.setData("double-buffer-image", image);
            }

            // Initializes the graphics context of the image.
            GC imageGC = new GC(image);
            imageGC.setBackground(e.gc.getBackground());
            imageGC.setForeground(e.gc.getForeground());
            imageGC.setFont(e.gc.getFont());

            // Fills the background.
            Rectangle imageSize = image.getBounds();
            imageGC.fillRectangle(0, 0, imageSize.width + 1, imageSize.height + 1);

            // Performs actual drawing here ...
            imageGC.drawRoundRectangle(10, 10, 200, 100, 5, 5);


            // Draws the buffer image onto the canvas.
            e.gc.drawImage(image, 0, 0);

            imageGC.dispose();
        }
    });
 

 

 

 

分享到:
评论

相关推荐

    SWT和JFACE学习笔记

    学习 SWT 和 JFace 对于理解 Eclipse 平台开发和 GUI 编程至关重要。它们提供的组件丰富且功能强大,能帮助开发者快速构建跨平台的应用程序。在实际开发中,结合使用 SWT 和 JFace 可以平衡性能和易用性,提高开发...

    swt,jface笔记

    在"swt,jface笔记"这个压缩包中,可能包含了关于这两项技术的学习笔记、示例代码、教程等资料。通过深入学习和实践这些材料,你可以更好地理解和掌握SWT和JFace的使用,从而提高开发Java桌面应用的能力。

    SWT控件知识学习笔记

    ### SWT控件知识学习笔记 #### 一、SWT/JFace常用组件介绍 SWT (Standard Widget Toolkit) 是 Eclipse 平台的一个图形界面工具包,它提供了与平台无关的 GUI 组件,允许开发者构建高性能的应用程序。SWT/JFace ...

    学习SWT,RCP的笔记.doc

    JFace是建立在SWT基础上的一套更高层次的UI库,它主要关注于应用程序的高级功能,如视图管理、模型视图控制器(MVC)架构的支持等。通过JFace,开发者可以更容易地构建复杂的用户界面。 ### 四、SWT组件常用方法详解 ...

    swt学习笔记摘录(入门程序)

    SWT(Standard Widget Toolkit)是Java中用于构建图形用户界面(GUI)的一种库,与AWT和Swing不同,SWT直接与操作系统底层交互,提供更原生的...通过学习和掌握SWT,开发者可以创建出与本地应用相媲美的Java应用程序。

    Eclipse SWT/JFacekfszj_jb51

    这些文件可能是资源链接或笔记,jb51.net是一个提供各种编程资源和教程的网站,"电子书大全.url"可能指向一个电子书集合的网页,"PDF阅读器下载.url"可能是推荐的PDF阅读器下载链接,"脚本之家.url"可能是另一个编程...

    Eclipse插件开发学习笔记1-8章

    以下是对Eclipse插件开发学习笔记1-8章的主要知识点的详细说明: 1. **Eclipse平台简介** (03第1章 Eclipse平台简介.pdf) - Eclipse平台是基于OSGi服务框架的,它提供了插件化的架构,使得开发者可以轻松地添加、...

    Eclipse插件开发学习笔记.txt

    SWT/JFace的事件处理,swt,eclipse插件开发学习笔记

    Eclipse插件开发学习笔记 第一篇 开发基础 (第一章到第八章)

    本书的主要内容是介绍Eclipse插件开发的相关知识和技巧,包括Eclipse的系统结构、SWT/JFace技术、插件开发方法、RCP开发方法以及其他一些相关的技术专题。本书覆盖了Eclipse平台技术的核心领域,是目前市场上讲述...

    Java学习笔记 JDK Eclipse Web JSP 等

    在"Java学习笔记"中,我们涵盖了多个重要的Java技术领域,包括JDK的安装、Eclipse集成开发环境的设置、SWT和JFace库的应用,以及Web和JSP的相关知识。 1. **JDK安装**:Java Development Kit (JDK) 是编写Java程序...

    Eclipse插件开发学习笔记1-5章

    以上就是Eclipse插件开发学习笔记1-5章的主要内容,每一章都是逐步深入,从平台基础知识到具体编程实践,为初学者提供了一个全面的学习路径。通过对这些知识点的掌握,你可以开始构建属于自己的Eclipse插件,提升...

    swt开发的笔记

    通过学习这些笔记,开发者可以深入了解如何使用SWT创建高效、原生感的用户界面,以及如何与其他Eclipse相关技术如JFace和RCP协同工作。对于想要提升Java GUI编程能力,特别是希望在Eclipse平台上开发桌面应用的...

    Eclipse插件开发学习笔记(ch0-3)

    本学习笔记主要涵盖了Eclipse插件开发的基础知识,旨在帮助初学者掌握如何利用Eclipse平台进行插件开发。 首先,我们需要理解Eclipse平台的核心架构。【1第1章 Eclipse平台简介.pdf】会详细讲解,Eclipse基于OSGI...

    Eclipse插件开发学习笔记 第二篇 核心技术 (第九章到第十三章)

    本书的主要内容是介绍Eclipse插件开发的相关知识和技巧,包括Eclipse的系统结构、SWT/JFace技术、插件开发方法、RCP开发方法以及其他一些相关的技术专题。本书覆盖了Eclipse平台技术的核心领域,是目前市场上讲述...

    Eclipse插件开发学习笔记 第三篇 高级进阶 (第十九章到第二十二章)

    本书的主要内容是介绍Eclipse插件开发的相关知识和技巧,包括Eclipse的系统结构、SWT/JFace技术、插件开发方法、RCP开发方法以及其他一些相关的技术专题。本书覆盖了Eclipse平台技术的核心领域,是目前市场上讲述...

    Eclipse插件开发学习笔记 第二篇 核心技术 (第十四章到第十八章)

    本书的主要内容是介绍Eclipse插件开发的相关知识和技巧,包括Eclipse的系统结构、SWT/JFace技术、插件开发方法、RCP开发方法以及其他一些相关的技术专题。本书覆盖了Eclipse平台技术的核心领域,是目前市场上讲述...

    eclipse插件开发学习笔记

    - JFace建立在SWT之上,提供了更高级别的抽象,使得开发者可以更轻松地创建复杂的用户界面。JFace特别强调数据模型和视图之间的分离,这使得界面设计变得更加灵活。 **1.3 插件技术和OSGi** - Eclipse的核心架构之...

    Eclipse插件开发学习笔记(ch20-21)

    《Eclipse插件开发学习笔记》是一本专为初学者设计的优秀教程,它深入浅出地介绍了如何在Eclipse环境中进行插件开发。Eclipse作为一个开放源代码的集成开发环境(IDE),拥有强大的可扩展性,其插件机制使得开发者...

    Eclipse插件开发学习笔记6-11章

    这本学习笔记涵盖了从第6章到第11章的关键内容,旨在为初学者提供一个扎实的入门指南。 第6章 "界面开发工具"介绍了Eclipse中的SWT和JFace库,它们是构建用户界面的基础。SWT(Standard Widget Toolkit)是Eclipse...

    Eclipse插件开发笔记—PDF—带目录

    1.3 SWT/JFace技术 1.4 插件技术和OSGi 1.5 RCP技术 1.6 EMF技术 1.7 GEF技术 1.8 本章小结 第2章 SWT/JFace概述 第3章 SWT编程基础 第4章 使用基本控件与对话框 第5章 容器与布局管理器 第6章 界面开发工具 第7章 ...

Global site tag (gtag.js) - Google Analytics