SWT图形范例 : 二维图形 « SWT-JFace-Eclipse « Java

En
Java
1. 图形用户界面
2. 三维图形动画
3. 高级图形
4. 蚂蚁编译
5. Apache类库
6. 统计图
7. 
8. 集合数据结构
9. 数据类型
10. 数据库JDBC
11. 设计模式
12. 开发相关类
13. EJB3
14. 电子邮件
15. 事件
16. 文件输入输出
17. 游戏
18. 泛型
19. GWT
20. Hibernate
21. 本地化
22. J2EE平台
23. 基于J2ME
24. JDK-6
25. JNDI的LDAP
26. JPA
27. JSP技术
28. JSTL
29. 语言基础知识
30. 网络协议
31. PDF格式RTF格式
32. 映射
33. 常规表达式
34. 脚本
35. 安全
36. Servlets
37. Spring
38. Swing组件
39. 图形用户界面
40. SWT-JFace-Eclipse
41. 线程
42. 应用程序
43. Velocity
44. Web服务SOA
45. 可扩展标记语言
Java 教程
Java » SWT-JFace-Eclipse » 二维图形屏幕截图 
SWT图形范例
SWT图形范例


import java.io.IOException;
import java.io.InputStream;
import java.util.HashSet;
import java.util.Iterator;
import java.util.MissingResourceException;
import java.util.Random;
import java.util.ResourceBundle;
import java.util.Vector;

import org.eclipse.swt.SWT;
import org.eclipse.swt.SWTException;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Path;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.ColorDialog;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Sash;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Spinner;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.widgets.ToolItem;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;

public class GraphicsExample {

  Composite parent;

  GraphicsTab[] tabs;

  GraphicsTab tab;

  Object[] tabBackground;

  boolean animate;

  Listener redrawListener;

  ToolBar toolBar;

  Tree tabList;

  Canvas canvas;

  Composite controlPanel, tabPanel;

  ToolItem playItem, pauseItem, backItem, dbItem;

  Spinner timerSpinner;

  Menu backMenu;

  MenuItem customMI;

  Image customImage;

  Color customColor;

  Vector images;

  static boolean advanceGraphics, advanceGraphicsInit;

  static final int TIMER = 30;

  public GraphicsExample(final Composite parent) {
    this.parent = parent;
    redrawListener = new Listener() {
      public void handleEvent(Event e) {
        redraw();
      }
    };
    GridData data;
    GridLayout layout = new GridLayout(3false);
    layout.horizontalSpacing = 1;
    parent.setLayout(layout);
    tabs = createTabs();
    images = new Vector();
    createToolBar(parent);
    createTabList(parent);
    final Sash sash = new Sash(parent, SWT.VERTICAL);
    createTabPanel(parent);
    data = new GridData(SWT.FILL, SWT.CENTER, true, false);
    data.horizontalSpan = 3;
    toolBar.setLayoutData(data);
    data = new GridData(SWT.CENTER, SWT.FILL, false, true);
    data.widthHint = tabList.computeSize(SWT.DEFAULT, SWT.DEFAULT).x + 50;
    tabList.setLayoutData(data);
    data = new GridData(SWT.CENTER, SWT.FILL, false, true);
    sash.setLayoutData(data);
    data = new GridData(SWT.FILL, SWT.FILL, true, true);
    tabPanel.setLayoutData(data);
    sash.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event event) {
        if (event.detail != SWT.DRAG) {
          GridData data = (GridDatatabList.getLayoutData();
          data.widthHint = event.x
              - tabList.computeTrim(0000).width;
          parent.layout(true);
          animate = pauseItem.getEnabled();
        else {
          animate = false;
        }
      }
    });
    setTab(tab);
    startAnimationTimer();
  }

  boolean checkAdvancedGraphics() {
    if (advanceGraphicsInit)
      return advanceGraphics;
    advanceGraphicsInit = true;
    Display display = Display.getCurrent();
    try {
      Path path = new Path(display);
      path.dispose();
    catch (SWTException e) {
      Shell shell = display.getActiveShell(), newShell = null;
      if (shell == null)
        shell = newShell = new Shell(display);
      MessageBox dialog = new MessageBox(shell, SWT.ICON_WARNING | SWT.OK);
      dialog.setText("Warning")//$NON-NLS-1$
      dialog.setMessage("LibNotFound")//$NON-NLS-1$
      dialog.open();
      if (newShell != null)
        newShell.dispose();
      return false;
    }
    return advanceGraphics = true;
  }

  void createCanvas(Composite parent) {
    canvas = new Canvas(parent, SWT.NO_BACKGROUND);
    canvas.addListener(SWT.Paint, new Listener() {
      public void handleEvent(Event event) {
        GC gc;
        Rectangle rect = canvas.getClientArea();
        Image buffer = null;
        if (dbItem.getSelection()) {
          buffer = new Image(canvas.getDisplay(), rect);
          gc = new GC(buffer);
        else {
          gc = event.gc;
        }
        paintBackground(gc, rect);
        GraphicsTab tab = getTab();
        if (tab != null)
          tab.paint(gc, rect.width, rect.height);
        if (gc != event.gc)
          gc.dispose();
        if (buffer != null) {
          event.gc.drawImage(buffer, 00);
          buffer.dispose();
        }
      }
    });
  }

  void createControlPanel(Composite parent) {
    Group group;
    controlPanel = group = new Group(parent, SWT.NONE);
    group.setText(getResourceString("Settings"))//$NON-NLS-1$
    controlPanel.setLayout(new RowLayout());
  }

  void createTabPanel(Composite parent) {
    tabPanel = new Composite(parent, SWT.NONE);
    GridData data;
    GridLayout layout = new GridLayout(1false);
    layout.marginHeight = layout.marginWidth = 0;
    tabPanel.setLayout(layout);
    createCanvas(tabPanel);
    createControlPanel(tabPanel);
    data = new GridData(SWT.FILL, SWT.FILL, true, true);
    canvas.setLayoutData(data);
    data = new GridData(SWT.FILL, SWT.CENTER, true, false);
    controlPanel.setLayoutData(data);
  }

  void createToolBar(final Composite parent) {
    final Display display = parent.getDisplay();

    toolBar = new ToolBar(parent, SWT.FLAT);
    Listener toolBarListener = new Listener() {
      public void handleEvent(Event event) {
        switch (event.type) {
        case SWT.Selection: {
          if (event.widget == playItem) {
            animate = true;
            playItem.setEnabled(!animate);
            pauseItem.setEnabled(animate);
          else if (event.widget == pauseItem) {
            animate = false;
            playItem.setEnabled(!animate);
            pauseItem.setEnabled(animate);
          else if (event.widget == backItem) {
            final ToolItem toolItem = (ToolItemevent.widget;
            final ToolBar toolBar = toolItem.getParent();
            Rectangle toolItemBounds = toolItem.getBounds();
            Point point = toolBar.toDisplay(new Point(
                toolItemBounds.x, toolItemBounds.y));
            backMenu.setLocation(point.x, point.y
                + toolItemBounds.height);
            backMenu.setVisible(true);
          }
        }
          break;
        }
      }
    };

    playItem = new ToolItem(toolBar, SWT.PUSH);
    playItem.setText(getResourceString("Play"))//$NON-NLS-1$
    playItem.setImage(loadImage(display, "play.gif"))//$NON-NLS-1$
    playItem.addListener(SWT.Selection, toolBarListener);

    pauseItem = new ToolItem(toolBar, SWT.PUSH);
    pauseItem.setText(getResourceString("Pause"))//$NON-NLS-1$
    pauseItem.setImage(loadImage(display, "pause.gif"))//$NON-NLS-1$
    pauseItem.addListener(SWT.Selection, toolBarListener);

    backItem = new ToolItem(toolBar, SWT.PUSH);
    backItem.setText(getResourceString("Background"))//$NON-NLS-1$
    backItem.addListener(SWT.Selection, toolBarListener);
    String[] names = new String[] { getResourceString("White")//$NON-NLS-1$
        getResourceString("Black")//$NON-NLS-1$
        getResourceString("Red")//$NON-NLS-1$
        getResourceString("Green")//$NON-NLS-1$
        getResourceString("Blue")//$NON-NLS-1$
        getResourceString("CustomColor")//$NON-NLS-1$
    };
    Color[] colors = new Color[] { display.getSystemColor(SWT.COLOR_WHITE),
        display.getSystemColor(SWT.COLOR_BLACK),
        display.getSystemColor(SWT.COLOR_RED),
        display.getSystemColor(SWT.COLOR_GREEN),
        display.getSystemColor(SWT.COLOR_BLUE), null, };
    backMenu = new Menu(parent);
    Listener listener = new Listener() {
      public void handleEvent(Event event) {
        MenuItem item = (MenuItemevent.widget;
        if (customMI == item) {
          ColorDialog dialog = new ColorDialog(parent.getShell());
          RGB rgb = dialog.open();
          if (rgb == null)
            return;
          if (customColor != null)
            customColor.dispose();
          customColor = new Color(display, rgb);
          if (customImage != null)
            customImage.dispose();
          customImage = createImage(display, customColor);
          item.setData(new Object[] { customColor, customImage });
          item.setImage(customImage);
        }
        tabBackground = (Object[]) item.getData();
        backItem.setImage((ImagetabBackground[1]);
        canvas.redraw();
      }
    };
    for (int i = 0; i < names.length; i++) {
      MenuItem item = new MenuItem(backMenu, SWT.NONE);
      item.setText(names[i]);
      item.addListener(SWT.Selection, listener);
      Image image = null;
      if (colors[i!= null) {
        image = createImage(display, colors[i]);
        images.addElement(image);
        item.setImage(image);
      else {
        // custom menu item
        customMI = item;
      }
      item.setData(new Object[] { colors[i], image });
      if (tabBackground == null) {
        tabBackground = (Object[]) item.getData();
        backItem.setImage((ImagetabBackground[1]);
      }
    }

    dbItem = new ToolItem(toolBar, SWT.CHECK);
    dbItem.setText(getResourceString("DoubleBuffer"))//$NON-NLS-1$
    dbItem.setImage(loadImage(display, "db.gif"))//$NON-NLS-1$

    ToolItem separator = new ToolItem(toolBar, SWT.SEPARATOR);
    Composite comp = new Composite(toolBar, SWT.NONE);
    GridData data;
    GridLayout layout = new GridLayout(1false);
    layout.verticalSpacing = 0;
    layout.marginWidth = layout.marginHeight = 3;
    comp.setLayout(layout);
    timerSpinner = new Spinner(comp, SWT.BORDER | SWT.WRAP);
    data = new GridData(SWT.CENTER, SWT.CENTER, false, false);
    timerSpinner.setLayoutData(data);
    Label label = new Label(comp, SWT.NONE);
    label.setText(getResourceString("Animation"))//$NON-NLS-1$
    data = new GridData(SWT.CENTER, SWT.CENTER, false, false);
    label.setLayoutData(data);
    timerSpinner.setMaximum(1000);
    timerSpinner.setSelection(TIMER);
    timerSpinner.setSelection(TIMER);
    separator.setControl(comp);
    separator.setWidth(comp.computeSize(SWT.DEFAULT, SWT.DEFAULT).x);
  }

  Image createImage(Display display, Color color) {
    Image image = new Image(display, 1616);
    GC gc = new GC(image);
    gc.setBackground(color);
    Rectangle rect = image.getBounds();
    gc.fillRectangle(rect);
    if (color.equals(display.getSystemColor(SWT.COLOR_BLACK))) {
      gc.setForeground(display.getSystemColor(SWT.COLOR_WHITE));
    }
    gc.drawRectangle(rect.x, rect.y, rect.width - 1, rect.height - 1);
    gc.dispose();
    return image;
  }

  void createTabList(Composite parent) {
    tabList = new Tree(parent, SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL
        | SWT.BORDER);
    HashSet set = new HashSet();
    for (int i = 0; i < tabs.length; i++) {
      GraphicsTab tab = tabs[i];
      set.add(tab.getCategory());
    }
    for (Iterator iter = set.iterator(); iter.hasNext();) {
      String text = (Stringiter.next();
      TreeItem item = new TreeItem(tabList, SWT.NONE);
      item.setText(text);
    }
    TreeItem[] items = tabList.getItems();
    for (int i = 0; i < items.length; i++) {
      TreeItem item = items[i];
      for (int j = 0; j < tabs.length; j++) {
        GraphicsTab tab = tabs[j];
        if (item.getText().equals(tab.getCategory())) {
          TreeItem item1 = new TreeItem(item, SWT.NONE);
          item1.setText(tab.getText());
          item1.setData(tab);
        }
      }
    }
    tabList.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event event) {
        TreeItem item = (TreeItemevent.item;
        if (item != null) {
          setTab((GraphicsTabitem.getData());
        }
      }
    });
  }

  GraphicsTab[] createTabs() {
    return new GraphicsTab[] { new LineTab(this)new StarPolyTab(this),
        tab = new IntroTab(this)new BlackHoleTab(this)};
  }

  /**
   * Disposes all resources created by the receiver.
   */
  public void dispose() {
    if (tabs != null) {
      for (int i = 0; i < tabs.length; i++) {
        GraphicsTab tab = tabs[i];
        tab.dispose();
      }
    }
    tabs = null;
    if (images != null) {
      for (int i = 0; i < images.size(); i++) {
        ((Imageimages.elementAt(i)).dispose();
      }
    }
    images = null;
    if (customColor != null)
      customColor.dispose();
    customColor = null;
    if (customImage != null)
      customImage.dispose();
    customImage = null;
  }

  TreeItem findItemByData(TreeItem[] items, Object data) {
    for (int i = 0; i < items.length; i++) {
      TreeItem item = items[i];
      if (item.getData() == data)
        return item;
      item = findItemByData(item.getItems(), data);
      if (item != null)
        return item;
    }
    return null;
  }

  /**
   * Gets the current tab.
   */
  public GraphicsTab getTab() {
    return tab;
  }

  Listener getRedrawListener() {
    return redrawListener;
  }

  /**
   * Gets a string from the resource bundle. We don't want to crash because of
   * a missing String. Returns the key if not found.
   */
  static String getResourceString(String key) {
      return "key";
  }

  static Image loadImage(Display display, Class clazz, String string) {
    InputStream stream = clazz.getResourceAsStream(string);
    if (stream == null)
      return null;
    Image image = null;
    try {
      image = new Image(display, stream);
    catch (SWTException ex) {
    finally {
      try {
        stream.close();
      catch (IOException ex) {
      }
    }
    return image;
  }

  Image loadImage(Display display, String name) {
    Image image = loadImage(display, GraphicsExample.class, name);
    if (image != null)
      images.addElement(image);
    return image;
  }

  void paintBackground(GC gc, Rectangle rect) {
    gc.setBackground((ColortabBackground[0]);
    gc.fillRectangle(rect);
  }

  /**
   * Redraws the current tab.
   */
  public void redraw() {
    canvas.redraw();
  }

  /**
   * Grabs input focus.
   */
  public void setFocus() {
    tabList.setFocus();
  }

  /**
   * Sets the current tab.
   */
  public void setTab(GraphicsTab tab) {
    this.tab = tab;
    Control[] children = controlPanel.getChildren();
    for (int i = 0; i < children.length; i++) {
      Control control = children[i];
      control.dispose();
    }
    if (tab != null) {
      tab.createControlPanel(controlPanel);
      animate = tab.isAnimated();
    }
    playItem.setEnabled(!animate);
    pauseItem.setEnabled(animate);
    GridData data = (GridDatacontrolPanel.getLayoutData();
    children = controlPanel.getChildren();
    data.exclude = children.length == 0;
    controlPanel.setVisible(!data.exclude);
    if (data.exclude) {
      tabPanel.layout();
    else {
      tabPanel.layout(children);
    }
    if (tab != null) {
      TreeItem[] selection = tabList.getSelection();
      if (selection.length == || selection[0].getData() != tab) {
        TreeItem item = findItemByData(tabList.getItems(), tab);
        if (item != null)
          tabList.setSelection(new TreeItem[] { item });
      }
    }
    canvas.redraw();
  }

  void startAnimationTimer() {
    final Display display = Display.getCurrent();
    display.timerExec(timerSpinner.getSelection()new Runnable() {
      public void run() {
        if (canvas.isDisposed())
          return;
        if (animate) {
          GraphicsTab tab = getTab();
          if (tab != null && tab.isAnimated()) {
            Rectangle rect = canvas.getClientArea();
            tab.next(rect.width, rect.height);
            canvas.redraw();
            canvas.update();
          }
        }
        display.timerExec(timerSpinner.getSelection()this);
      }
    });
  }

  public static void main(String[] args) {
    Display display = new Display();
    Shell shell = new Shell(display);
    shell.setText(getResourceString("SWTGraphics"))//$NON-NLS-1$
    final GraphicsExample example = new GraphicsExample(shell);
    shell.addListener(SWT.Close, new Listener() {
      public void handleEvent(Event event) {
        example.dispose();
      }
    });
    shell.open();
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch())
        display.sleep();
    }
  }
}

/*******************************************************************************
 * Copyright (c) 2000, 2005 IBM Corporation and others. All rights reserved.
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
 * and is available at http://www.eclipse.org/legal/epl-v10.html
 
 * Contributors: IBM Corporation - initial API and implementation
 ******************************************************************************/
abstract class GraphicsTab {

  GraphicsExample example;

  public GraphicsTab(GraphicsExample example) {
    this.example = example;
  }

  /**
   * Creates the widgets used to control the drawing.
   */
  public void createControlPanel(Composite parent) {
  }

  /**
   * Disposes resources created by the receiver.
   */
  public void dispose() {
  }

  /**
   * Answer the receiver's name.
   */
  public abstract String getText();

  /**
   * Answer the receiver's category.
   */
  public String getCategory() {
    return GraphicsExample.getResourceString("Misc")//$NON-NLS-1$
  }

  /**
   * Answer whether the receiver is animated or not.
   */
  public boolean isAnimated() {
    return false;
  }

  /**
   * Advance the animation.
   */
  public void next(int width, int height) {
  }

  /**
   * Paint the receiver into the specified GC.
   */
  public void paint(GC gc, int width, int height) {
  }

}

/*******************************************************************************
 * Copyright (c) 2000, 2005 IBM Corporation and others. All rights reserved.
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
 * and is available at http://www.eclipse.org/legal/epl-v10.html
 
 * Contributors: IBM Corporation - initial API and implementation
 ******************************************************************************/
class LineTab extends GraphicsTab {

  public LineTab(GraphicsExample example) {
    super(example);
  }

  public String getText() {
    return GraphicsExample.getResourceString("Line")//$NON-NLS-1$
  }

  public void paint(GC gc, int width, int height) {
    gc.drawLine(00, width, height);
    gc.drawLine(width, 00, height);
  }
}

/*******************************************************************************
 * Copyright (c) 2000, 2005 IBM Corporation and others. All rights reserved.
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
 * and is available at http://www.eclipse.org/legal/epl-v10.html
 
 * Contributors: IBM Corporation - initial API and implementation
 ******************************************************************************/
class StarPolyTab extends GraphicsTab {
  int[] radial;

  static final int POINTS = 11;

  Combo fillRuleCb;

  public StarPolyTab(GraphicsExample example) {
    super(example);
    radial = new int[POINTS * 2];
  }

  public void createControlPanel(Composite parent) {
    new Label(parent, SWT.NONE).setText(GraphicsExample
        .getResourceString("FillRule"))//$NON-NLS-1$
    fillRuleCb = new Combo(parent, SWT.DROP_DOWN);
    fillRuleCb.add("FILL_EVEN_ODD");
    fillRuleCb.add("FILL_WINDING");
    fillRuleCb.select(0);
    fillRuleCb.addListener(SWT.Selection, example.getRedrawListener());
  }

  public String getCategory() {
    return GraphicsExample.getResourceString("Polygons")//$NON-NLS-1$
  }

  public String getText() {
    return GraphicsExample.getResourceString("StarPolygon")//$NON-NLS-1$
  }

  public void paint(GC gc, int width, int height) {
    int centerX = width / 2;
    int centerY = height / 2;
    int pos = 0;
    for (int i = 0; i < POINTS; ++i) {
      double r = Math.PI * * pos / POINTS;
      radial[i * 2(int) ((+ Math.cos(r)) * centerX);
      radial[i * 1(int) ((+ Math.sin(r)) * centerY);
      pos = (pos + POINTS / 2% POINTS;
    }
    Display display = Display.getCurrent();
    gc.setFillRule(fillRuleCb.getSelectionIndex() != ? SWT.FILL_WINDING
        : SWT.FILL_EVEN_ODD);
    gc.setBackground(display.getSystemColor(SWT.COLOR_WHITE));
    gc.fillPolygon(radial);
    gc.drawPolygon(radial);
  }
}

/*******************************************************************************
 * Copyright (c) 2000, 2005 IBM Corporation and others. All rights reserved.
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
 * and is available at http://www.eclipse.org/legal/epl-v10.html
 
 * Contributors: IBM Corporation - initial API and implementation
 ******************************************************************************/
class BlackHoleTab extends GraphicsTab {

  int size = 1;

  public BlackHoleTab(GraphicsExample example) {
    super(example);
  }

  public String getText() {
    return GraphicsExample.getResourceString("BlackHole")//$NON-NLS-1$
  }

  public boolean isAnimated() {
    return true;
  }

  public void next(int width, int height) {
    if (size > width * 2)
      size = 0;
    else
      size += 10;
  }

  public void paint(GC gc, int width, int height) {
    Display display = Display.getCurrent();
    gc.setBackground(display.getSystemColor(SWT.COLOR_BLACK));
    gc.fillOval((width - size2(height - size2, size, size);
  }
}

/*******************************************************************************
 * Copyright (c) 2000, 2005 IBM Corporation and others. All rights reserved.
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
 * and is available at http://www.eclipse.org/legal/epl-v10.html
 
 * Contributors: IBM Corporation - initial API and implementation
 ******************************************************************************/
class IntroTab extends GraphicsTab {

  Font font;

  Image image;

  Random random = new Random();

  float x, y;

  float incX = 10.0f;

  float incY = 5.0f;

  int textWidth, textHeight;

  String text = "SWT";

  public IntroTab(GraphicsExample example) {
    super(example);
  }

  public void dispose() {
    if (image != null)
      image.dispose();
    image = null;
    if (font != null)
      font.dispose();
    font = null;
  }

  public String getCategory() {
    return GraphicsExample.getResourceString("Introduction")//$NON-NLS-1$
  }

  public String getText() {
    return GraphicsExample.getResourceString("SWT")//$NON-NLS-1$
  }

  public boolean isAnimated() {
    return true;
  }

  public void next(int width, int height) {
    x += incX;
    y += incY;
    float random = (floatMath.random();
    if (x + textWidth > width) {
      x = width - textWidth;
      incX = random * -width / 16 1;
    }
    if (x < 0) {
      x = 0;
      incX = random * width / 16 1;
    }
    if (y + textHeight > height) {
      y = (height - textHeight2;
      incY = random * -height / 16 1;
    }
    if (y < 0) {
      y = 0;
      incY = random * height / 16 1;
    }
  }

  public void paint(GC gc, int width, int height) {
    if (!example.checkAdvancedGraphics())
      return;
    Display display = Display.getCurrent();
    if (image == null) {
      image = example.loadImage(Display.getCurrent()"irmaos.jpg");
      Rectangle rect = image.getBounds();
      FontData fd = display.getSystemFont().getFontData()[0];
      font = new Font(display, fd.getName(), rect.height / 4, SWT.BOLD);
      gc.setFont(font);
      Point size = gc.stringExtent(text);
      textWidth = size.x;
      textHeight = size.y;
    }
    Path path = new Path(display);
    path.addString(text, x, y, font);
    gc.setClipping(path);
    Rectangle rect = image.getBounds();
    gc.drawImage(image, 00, rect.width, rect.height, 00, width, height);
    gc.setClipping((Rectanglenull);
    gc.setForeground(display.getSystemColor(SWT.COLOR_BLUE));
    gc.drawPath(path);
  }
}



           
       
Related examples in the same category
1. SWT二维图表:流程SWT二维图表:流程
2. 使用Java2D关于SWT或Draw2D图形上下文使用Java2D关于SWT或Draw2D图形上下文
3. SWT二维的UnicodeSWT二维的Unicode
4. SWT二维简单演示SWT二维简单演示
5. SWT绘制二维SWT绘制二维
6. SWT Draw2D实例
7. 异或异或
8. 动画动画
9. 阿尔法渐变阿尔法渐变
10. 绘制绘制
11. 绘制文本演示绘制文本演示
12. GC创建
13. 调色板调色板
14. 透明度透明度
15. Draw2D样本Draw2D样本
16. 类分析仪类分析仪
17. 演示动画。使用双缓冲。演示动画。使用双缓冲。
18. 演示绘制圆弧演示绘制圆弧
19. 显示绘图多边形显示绘图多边形
20. 显示绘图点。它吸引了正弦波显示绘图点。它吸引了正弦波
21. 绘制回合矩形绘制回合矩形
22. 显示有关显示装置显示有关显示装置
23. 显示构造器的应用显示构造器的应用
24. 演示了如何利用垂直文本演示了如何利用垂直文本
25. 实用方法绘制图形
26. 显示绘图线显示绘图线
27. 演示动画演示动画
28. 演示如何绘制文字演示如何绘制文字
29. 显示绘图椭圆形显示绘图椭圆形
30. 演示了如何利用文字颜色演示了如何利用文字颜色
31. SWT涂料
32. SWT的OpenGL片段:绘制方
33. 图纸与变革,路径和alpha混合图纸与变革,路径和alpha混合
34. 绘制线条和多边形具有不同风格绘制线条和多边形具有不同风格
35. GC:实现一个简单的涂抹程序GC:实现一个简单的涂抹程序
36. GC:测量一个字符串GC:测量一个字符串
37. GC:绘制厚线GC:绘制厚线
38. 如何绘制直接在SWT控制如何绘制直接在SWT控制
www.java2java.com | Contact Us
Copyright 2010 - 2030 Java Source and Support. All rights reserved.
All other trademarks are property of their respective owners.