StyledText:嵌入图像 : 格式文本 « SWT « Java 教程

En
Java 教程
1. 语言基础
2. 数据类型
3. 操作符
4. 流程控制
5. 类定义
6. 开发相关
7. 反射
8. 正则表达式
9. 集合
10. 线
11. 文件
12. 泛型
13. 本土化
14. Swing
15. Swing事件
16. 二维图形
17. SWT
18. SWT 二维图形
19. 网络
20. 数据库
21. Hibernate
22. JPA
23. JSP
24. JSTL
25. Servlet
26. Web服务SOA
27. EJB3
28. Spring
29. PDF
30. 电子邮件
31. 基于J2ME
32. J2EE应用
33. XML
34. 设计模式
35. 日志
36. 安全
37. Apache工具
38. 蚂蚁编译
39. JUnit单元测试
Java
Java 教程 » SWT » 格式文本 
17. 42. 5. StyledText:嵌入图像
StyledText:嵌入图像
/*******************************************************************************
 * 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
 *******************************************************************************/
//package org.eclipse.swt.snippets;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.PaintObjectEvent;
import org.eclipse.swt.custom.PaintObjectListener;
import org.eclipse.swt.custom.StyleRange;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.events.VerifyEvent;
import org.eclipse.swt.events.VerifyListener;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.GlyphMetrics;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;

/**
 * StyledText snippet: embed images
 
 * For a list of all SWT example snippets see
 * http://www.eclipse.org/swt/snippets/
 
 @since 3.2
 */
public class StyledTextEmbedImages {

  static StyledText styledText;

  static String text = "This snippet shows how to embed images in a StyledText.\n"
      "Here is one: \uFFFC, and here is another: \uFFFC."
      "Use the add button to add an image from your filesystem to the StyledText at the current caret offset.";

  static Image[] images;

  static int[] offsets;

  static void addImage(Image image, int offset) {
    StyleRange style = new StyleRange();
    style.start = offset;
    style.length = 1;
    Rectangle rect = image.getBounds();
    style.metrics = new GlyphMetrics(rect.height, 0, rect.width);
    styledText.setStyleRange(style);
  }

  public static void main(String[] args) {
    final Display display = new Display();
    final Shell shell = new Shell(display);
    shell.setLayout(new GridLayout());
    styledText = new StyledText(shell, SWT.WRAP | SWT.BORDER);
    styledText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
    styledText.setText(text);
    images = new Image[] { display.getSystemImage(SWT.ICON_QUESTION),
        display.getSystemImage(SWT.ICON_INFORMATION)};
    offsets = new int[images.length];
    int lastOffset = 0;
    for (int i = 0; i < images.length; i++) {
      int offset = text.indexOf("\uFFFC", lastOffset);
      offsets[i= offset;
      addImage(images[i], offset);
      lastOffset = offset + 1;
    }

    // use a verify listener to keep the offsets up to date
    styledText.addVerifyListener(new VerifyListener() {
      public void verifyText(VerifyEvent e) {
        int start = e.start;
        int replaceCharCount = e.end - e.start;
        int newCharCount = e.text.length();
        for (int i = 0; i < offsets.length; i++) {
          int offset = offsets[i];
          if (start <= offset && offset < start + replaceCharCount) {
            // this image is being deleted from the text
            if (images[i!= null && !images[i].isDisposed()) {
              images[i].dispose();
              images[inull;
            }
            offset = -1;
          }
          if (offset != -&& offset >= start)
            offset += newCharCount - replaceCharCount;
          offsets[i= offset;
        }
      }
    });
    styledText.addPaintObjectListener(new PaintObjectListener() {
      public void paintObject(PaintObjectEvent event) {
        GC gc = event.gc;
        StyleRange style = event.style;
        int start = style.start;
        for (int i = 0; i < offsets.length; i++) {
          int offset = offsets[i];
          if (start == offset) {
            Image image = images[i];
            int x = event.x;
            int y = event.y + event.ascent - style.metrics.ascent;
            gc.drawImage(image, x, y);
          }
        }
      }
    });

    Button button = new Button(shell, SWT.PUSH);
    button.setText("Add Image");
    button.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));
    button.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event event) {
        FileDialog dialog = new FileDialog(shell);
        String filename = dialog.open();
        if (filename != null) {
          try {
            Image image = new Image(display, filename);
            int offset = styledText.getCaretOffset();
            styledText.replaceTextRange(offset, 0"\uFFFC");
            int index = 0;
            while (index < offsets.length) {
              if (offsets[index== -&& images[index== null)
                break;
              index++;
            }
            if (index == offsets.length) {
              int[] tmpOffsets = new int[index + 1];
              System.arraycopy(offsets, 0, tmpOffsets, 0, offsets.length);
              offsets = tmpOffsets;
              Image[] tmpImages = new Image[index + 1];
              System.arraycopy(images, 0, tmpImages, 0, images.length);
              images = tmpImages;
            }
            offsets[index= offset;
            images[index= image;
            addImage(image, offset);
          catch (Exception e) {
            e.printStackTrace();
          }
        }
      }
    });
    shell.setSize(400400);
    shell.open();
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch())
        display.sleep();
    }
    for (int i = 0; i < images.length; i++) {
      Image image = images[i];
      if (image != null && !image.isDisposed()) {
        image.dispose();
      }
    }
    display.dispose();
  }
}
17. 42. 格式文本
17. 42. 1. 创建StyledText控件
17. 42. 2. Create a StyledText that scrolls vertically, wraps text, and displays a border:Create a StyledText that scrolls vertically, wraps text, and displays a border:
17. 42. 3. 使用剪贴板使用剪贴板
17. 42. 4. 画一个文本框画一个文本框
17. 42. 5. StyledText:嵌入图像StyledText:嵌入图像
17. 42. 6. StyledText:使用梯度背景StyledText:使用梯度背景
17. 42. 7. StyledText:嵌入控件StyledText:嵌入控件
17. 42. 8. Getting Statistics: Caret Offset, Total Lines of Text, Total Characters and Current LineGetting Statistics: Caret Offset, Total Lines of Text, Total Characters and Current Line
17. 42. 9. 打印StyledText打印StyledText
17. 42. 10. 在一个单独的线程打印到默认打印机
17. 42. 11. 设置页面格式,打印
17. 42. 12. StyledText只读
17. 42. 13. 限制字符数限制字符数
17. 42. 14. 替换文字范围替换文字范围
17. 42. 15. Understanding the Repercussions
17. 42. 16. 一个简单的编辑器一个简单的编辑器
www.java2java.com | Contact Us
Copyright 2010 - 2030 Java Source and Support. All rights reserved.
All other trademarks are property of their respective owners.