<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FSWT_JFace_Eclipse%2FStyledText</id>
		<title>Java/SWT JFace Eclipse/StyledText - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FSWT_JFace_Eclipse%2FStyledText"/>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/SWT_JFace_Eclipse/StyledText&amp;action=history"/>
		<updated>2026-04-21T17:32:37Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java/SWT_JFace_Eclipse/StyledText&amp;diff=5666&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/SWT_JFace_Eclipse/StyledText&amp;diff=5666&amp;oldid=prev"/>
				<updated>2010-06-01T05:55:54Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 05:55, 1 июня 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java/SWT_JFace_Eclipse/StyledText&amp;diff=5665&amp;oldid=prev</id>
		<title> в 18:01, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/SWT_JFace_Eclipse/StyledText&amp;diff=5665&amp;oldid=prev"/>
				<updated>2010-05-31T18:01:43Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Demonstrates StyleRanges ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
//Send questions, comments, bug reports, etc. to the authors:&lt;br /&gt;
//Rob Warner (rwarner@interspatial.ru)&lt;br /&gt;
//Robert Harris (rbrt_harris@yahoo.ru)&lt;br /&gt;
import org.eclipse.swt.SWT;&lt;br /&gt;
import org.eclipse.swt.custom.*;&lt;br /&gt;
import org.eclipse.swt.graphics.Color;&lt;br /&gt;
import org.eclipse.swt.layout.*;&lt;br /&gt;
import org.eclipse.swt.widgets.*;&lt;br /&gt;
/**&lt;br /&gt;
 * This class demonstrates StyleRanges&lt;br /&gt;
 */&lt;br /&gt;
public class StyleRangeTest {&lt;br /&gt;
  private Color orange;&lt;br /&gt;
  private Color blue;&lt;br /&gt;
  /**&lt;br /&gt;
   * Runs the application&lt;br /&gt;
   */&lt;br /&gt;
  public void run() {&lt;br /&gt;
    Display display = new Display();&lt;br /&gt;
    Shell shell = new Shell(display);&lt;br /&gt;
    // Create colors for style ranges&lt;br /&gt;
    orange = new Color(display, 255, 127, 0);&lt;br /&gt;
    blue = display.getSystemColor(SWT.COLOR_BLUE);&lt;br /&gt;
    createContents(shell);&lt;br /&gt;
    shell.open();&lt;br /&gt;
    while (!shell.isDisposed()) {&lt;br /&gt;
      if (!display.readAndDispatch()) {&lt;br /&gt;
        display.sleep();&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    // We created orange, but not blue&lt;br /&gt;
    orange.dispose();&lt;br /&gt;
    display.dispose();&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Creates the main window contents&lt;br /&gt;
   * &lt;br /&gt;
   * @param shell the main window&lt;br /&gt;
   */&lt;br /&gt;
  private void createContents(Shell shell) {&lt;br /&gt;
    shell.setLayout(new FillLayout());&lt;br /&gt;
    // Create the StyledText&lt;br /&gt;
    StyledText styledText = new StyledText(shell, SWT.BORDER);&lt;br /&gt;
    // Set the text&lt;br /&gt;
    styledText.setText(&amp;quot;Go Gators&amp;quot;);&lt;br /&gt;
    /*&lt;br /&gt;
     * The multiple setStyleRange() method // Turn all of the text orange, with&lt;br /&gt;
     * the default background color styledText.setStyleRange(new StyleRange(0, 9,&lt;br /&gt;
     * orange, null));&lt;br /&gt;
     *  // Turn &amp;quot;Gators&amp;quot; blue styledText.setStyleRange(new StyleRange(3, 6, blue,&lt;br /&gt;
     * null));&lt;br /&gt;
     */&lt;br /&gt;
    /*&lt;br /&gt;
     * The setStyleRanges() method // Create the array to hold the StyleRanges&lt;br /&gt;
     * StyleRange[] ranges = new StyleRange[2];&lt;br /&gt;
     *  // Create the first StyleRange, making sure not to overlap. Include the&lt;br /&gt;
     * space. ranges[0] = new StyleRange(0, 3, orange, null);&lt;br /&gt;
     *  // Create the second StyleRange ranges[1] = new StyleRange(3, 6, blue,&lt;br /&gt;
     * null);&lt;br /&gt;
     *  // Replace all the StyleRanges for the StyledText&lt;br /&gt;
     * styledText.setStyleRanges(ranges);&lt;br /&gt;
     */&lt;br /&gt;
    /* The replaceStyleRanges() method */&lt;br /&gt;
    // Create the array to hold the StyleRanges&lt;br /&gt;
    StyleRange[] ranges = new StyleRange[2];&lt;br /&gt;
    // Create the first StyleRange, making sure not to overlap. Include the&lt;br /&gt;
    // space.&lt;br /&gt;
    ranges[0] = new StyleRange(0, 3, orange, null);&lt;br /&gt;
    // Create the second StyleRange&lt;br /&gt;
    ranges[1] = new StyleRange(3, 6, blue, null);&lt;br /&gt;
    // Replace only the StyleRanges in the affected area&lt;br /&gt;
    styledText.replaceStyleRanges(0, 9, ranges);&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * The application entry point&lt;br /&gt;
   * &lt;br /&gt;
   * @param args the command line arguments&lt;br /&gt;
   */&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    new StyleRangeTest().run();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Implements syntax coloring using the StyledText API ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//Send questions, comments, bug reports, etc. to the authors:&lt;br /&gt;
//Rob Warner (rwarner@interspatial.ru)&lt;br /&gt;
//Robert Harris (rbrt_harris@yahoo.ru)&lt;br /&gt;
import java.util.*;&lt;br /&gt;
import org.eclipse.swt.SWT;&lt;br /&gt;
import org.eclipse.swt.custom.*;&lt;br /&gt;
import org.eclipse.swt.graphics.Color;&lt;br /&gt;
import org.eclipse.swt.layout.*;&lt;br /&gt;
import org.eclipse.swt.widgets.*;&lt;br /&gt;
/**&lt;br /&gt;
 * This class implements syntax coloring using the StyledText API&lt;br /&gt;
 */&lt;br /&gt;
public class SyntaxTest {&lt;br /&gt;
  // Punctuation&lt;br /&gt;
  private static final String PUNCTUATION = &amp;quot;(){};!&amp;amp;|.+-*/&amp;quot;;&lt;br /&gt;
  // Color for the StyleRanges&lt;br /&gt;
  private Color red;&lt;br /&gt;
  /**&lt;br /&gt;
   * Runs the application&lt;br /&gt;
   */&lt;br /&gt;
  public void run() {&lt;br /&gt;
    Display display = new Display();&lt;br /&gt;
    Shell shell = new Shell(display);&lt;br /&gt;
    // Get color for style ranges&lt;br /&gt;
    red = display.getSystemColor(SWT.COLOR_RED);&lt;br /&gt;
    createContents(shell);&lt;br /&gt;
    shell.open();&lt;br /&gt;
    while (!shell.isDisposed()) {&lt;br /&gt;
      if (!display.readAndDispatch()) {&lt;br /&gt;
        display.sleep();&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    // No need to dispose red&lt;br /&gt;
    display.dispose();&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Creates the main window contents&lt;br /&gt;
   * &lt;br /&gt;
   * @param shell the main window&lt;br /&gt;
   */&lt;br /&gt;
  private void createContents(Shell shell) {&lt;br /&gt;
    shell.setLayout(new FillLayout());&lt;br /&gt;
    // Create the StyledText&lt;br /&gt;
    final StyledText styledText = new StyledText(shell, SWT.BORDER);&lt;br /&gt;
    // Add the syntax coloring handler&lt;br /&gt;
    styledText.addExtendedModifyListener(new ExtendedModifyListener() {&lt;br /&gt;
      public void modifyText(ExtendedModifyEvent event) {&lt;br /&gt;
        // Determine the ending offset&lt;br /&gt;
        int end = event.start + event.length - 1;&lt;br /&gt;
        // If they typed something, get it&lt;br /&gt;
        if (event.start &amp;lt;= end) {&lt;br /&gt;
          // Get the text&lt;br /&gt;
          String text = styledText.getText(event.start, end);&lt;br /&gt;
          // Create a collection to hold the StyleRanges&lt;br /&gt;
          java.util.List ranges = new java.util.ArrayList();&lt;br /&gt;
          // Turn any punctuation red&lt;br /&gt;
          for (int i = 0, n = text.length(); i &amp;lt; n; i++) {&lt;br /&gt;
            if (PUNCTUATION.indexOf(text.charAt(i)) &amp;gt; -1) {&lt;br /&gt;
              ranges.add(new StyleRange(event.start + i, 1, red, null, SWT.BOLD));&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
          // If we have any ranges to set, set them&lt;br /&gt;
          if (!ranges.isEmpty()) {&lt;br /&gt;
            styledText.replaceStyleRanges(event.start, event.length,&lt;br /&gt;
                (StyleRange[]) ranges.toArray(new StyleRange[0]));&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * The application entry point&lt;br /&gt;
   * &lt;br /&gt;
   * @param args the command line arguments&lt;br /&gt;
   */&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    new SyntaxTest().run();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
//Send questions, comments, bug reports, etc. to the authors:&lt;br /&gt;
//Rob Warner (rwarner@interspatial.ru)&lt;br /&gt;
//Robert Harris (rbrt_harris@yahoo.ru)&lt;br /&gt;
/**&lt;br /&gt;
 * This class contains information for syntax coloring and styling for an&lt;br /&gt;
 * extension&lt;br /&gt;
 */&lt;br /&gt;
class SyntaxData {&lt;br /&gt;
  private String extension;&lt;br /&gt;
  private Collection keywords;&lt;br /&gt;
  private String punctuation;&lt;br /&gt;
  private String comment;&lt;br /&gt;
  private String multiLineCommentStart;&lt;br /&gt;
  private String multiLineCommentEnd;&lt;br /&gt;
  /**&lt;br /&gt;
   * Constructs a SyntaxData&lt;br /&gt;
   * &lt;br /&gt;
   * @param extension the extension&lt;br /&gt;
   */&lt;br /&gt;
  public SyntaxData(String extension) {&lt;br /&gt;
    this.extension = extension;&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Gets the extension&lt;br /&gt;
   * &lt;br /&gt;
   * @return String&lt;br /&gt;
   */&lt;br /&gt;
  public String getExtension() {&lt;br /&gt;
    return extension;&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Gets the comment&lt;br /&gt;
   * &lt;br /&gt;
   * @return String&lt;br /&gt;
   */&lt;br /&gt;
  public String getComment() {&lt;br /&gt;
    return comment;&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Sets the comment&lt;br /&gt;
   * &lt;br /&gt;
   * @param comment The comment to set.&lt;br /&gt;
   */&lt;br /&gt;
  public void setComment(String comment) {&lt;br /&gt;
    this.rument = comment;&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Gets the keywords&lt;br /&gt;
   * &lt;br /&gt;
   * @return Collection&lt;br /&gt;
   */&lt;br /&gt;
  public Collection getKeywords() {&lt;br /&gt;
    return keywords;&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Sets the keywords&lt;br /&gt;
   * &lt;br /&gt;
   * @param keywords The keywords to set.&lt;br /&gt;
   */&lt;br /&gt;
  public void setKeywords(Collection keywords) {&lt;br /&gt;
    this.keywords = keywords;&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Gets the multi-line comment end&lt;br /&gt;
   * &lt;br /&gt;
   * @return String&lt;br /&gt;
   */&lt;br /&gt;
  public String getMultiLineCommentEnd() {&lt;br /&gt;
    return multiLineCommentEnd;&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Sets the multi-line comment end&lt;br /&gt;
   * &lt;br /&gt;
   * @param multiLineCommentEnd The multiLineCommentEnd to set.&lt;br /&gt;
   */&lt;br /&gt;
  public void setMultiLineCommentEnd(String multiLineCommentEnd) {&lt;br /&gt;
    this.multiLineCommentEnd = multiLineCommentEnd;&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Gets the multi-line comment start&lt;br /&gt;
   * &lt;br /&gt;
   * @return String&lt;br /&gt;
   */&lt;br /&gt;
  public String getMultiLineCommentStart() {&lt;br /&gt;
    return multiLineCommentStart;&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Sets the multi-line comment start&lt;br /&gt;
   * &lt;br /&gt;
   * @param multiLineCommentStart The multiLineCommentStart to set.&lt;br /&gt;
   */&lt;br /&gt;
  public void setMultiLineCommentStart(String multiLineCommentStart) {&lt;br /&gt;
    this.multiLineCommentStart = multiLineCommentStart;&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Gets the punctuation&lt;br /&gt;
   * &lt;br /&gt;
   * @return String&lt;br /&gt;
   */&lt;br /&gt;
  public String getPunctuation() {&lt;br /&gt;
    return punctuation;&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Sets the punctuation&lt;br /&gt;
   * &lt;br /&gt;
   * @param punctuation The punctuation to set.&lt;br /&gt;
   */&lt;br /&gt;
  public void setPunctuation(String punctuation) {&lt;br /&gt;
    this.punctuation = punctuation;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
//Send questions, comments, bug reports, etc. to the authors:&lt;br /&gt;
//Rob Warner (rwarner@interspatial.ru)&lt;br /&gt;
//Robert Harris (rbrt_harris@yahoo.ru)&lt;br /&gt;
/**&lt;br /&gt;
 * This class manages the syntax coloring and styling data&lt;br /&gt;
 */&lt;br /&gt;
class SyntaxManager {&lt;br /&gt;
  // Lazy cache of SyntaxData objects&lt;br /&gt;
  private static Map data = new Hashtable();&lt;br /&gt;
  /**&lt;br /&gt;
   * Gets the syntax data for an extension&lt;br /&gt;
   */&lt;br /&gt;
  public static synchronized SyntaxData getSyntaxData(String extension) {&lt;br /&gt;
    // Check in cache&lt;br /&gt;
    SyntaxData sd = (SyntaxData) data.get(extension);&lt;br /&gt;
    if (sd == null) {&lt;br /&gt;
      // Not in cache; load it and put in cache&lt;br /&gt;
      sd = loadSyntaxData(extension);&lt;br /&gt;
      if (sd != null) data.put(sd.getExtension(), sd);&lt;br /&gt;
    }&lt;br /&gt;
    return sd;&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Loads the syntax data for an extension&lt;br /&gt;
   * &lt;br /&gt;
   * @param extension the extension to load&lt;br /&gt;
   * @return SyntaxData&lt;br /&gt;
   */&lt;br /&gt;
  private static SyntaxData loadSyntaxData(String extension) {&lt;br /&gt;
    SyntaxData sd = null;&lt;br /&gt;
    try {&lt;br /&gt;
      ResourceBundle rb = ResourceBundle.getBundle(&amp;quot;examples.ch11.&amp;quot; + extension);&lt;br /&gt;
      sd = new SyntaxData(extension);&lt;br /&gt;
      sd.setComment(rb.getString(&amp;quot;comment&amp;quot;));&lt;br /&gt;
      sd.setMultiLineCommentStart(rb.getString(&amp;quot;multilinecommentstart&amp;quot;));&lt;br /&gt;
      sd.setMultiLineCommentEnd(rb.getString(&amp;quot;multilinecommentend&amp;quot;));&lt;br /&gt;
      // Load the keywords&lt;br /&gt;
      Collection keywords = new ArrayList();&lt;br /&gt;
      for (StringTokenizer st = new StringTokenizer(rb.getString(&amp;quot;keywords&amp;quot;), &amp;quot; &amp;quot;); st&lt;br /&gt;
          .hasMoreTokens();) {&lt;br /&gt;
        keywords.add(st.nextToken());&lt;br /&gt;
      }&lt;br /&gt;
      sd.setKeywords(keywords);&lt;br /&gt;
      // Load the punctuation&lt;br /&gt;
      sd.setPunctuation(rb.getString(&amp;quot;punctuation&amp;quot;));&lt;br /&gt;
    } catch (MissingResourceException e) {&lt;br /&gt;
      // Ignore&lt;br /&gt;
    }&lt;br /&gt;
    return sd;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sample Styled Text ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/******************************************************************************&lt;br /&gt;
 * All Right Reserved. &lt;br /&gt;
 * Copyright (c) 1998, 2004 Jackwind Li Guojie&lt;br /&gt;
 * &lt;br /&gt;
 * Created on Feb 19, 2004 8:49:16 PM by JACK&lt;br /&gt;
 * $Id$&lt;br /&gt;
 * &lt;br /&gt;
 *****************************************************************************/&lt;br /&gt;
import org.eclipse.swt.SWT;&lt;br /&gt;
import org.eclipse.swt.custom.StyleRange;&lt;br /&gt;
import org.eclipse.swt.custom.StyledText;&lt;br /&gt;
import org.eclipse.swt.graphics.Font;&lt;br /&gt;
import org.eclipse.swt.layout.GridData;&lt;br /&gt;
import org.eclipse.swt.layout.GridLayout;&lt;br /&gt;
import org.eclipse.swt.widgets.Display;&lt;br /&gt;
import org.eclipse.swt.widgets.Shell;&lt;br /&gt;
public class SampleStyledText {&lt;br /&gt;
  Display display = new Display();&lt;br /&gt;
  Shell shell = new Shell(display);&lt;br /&gt;
  &lt;br /&gt;
  StyledText styledText;&lt;br /&gt;
  public SampleStyledText() {&lt;br /&gt;
    init();&lt;br /&gt;
    &lt;br /&gt;
    shell.setLayout(new GridLayout());&lt;br /&gt;
    &lt;br /&gt;
    styledText = new StyledText(shell, SWT.MULTI | SWT.WRAP | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);&lt;br /&gt;
    &lt;br /&gt;
    styledText.setLayoutData(new GridData(GridData.FILL_BOTH));&lt;br /&gt;
    &lt;br /&gt;
    Font font = new Font(shell.getDisplay(), &amp;quot;Courier New&amp;quot;, 12, SWT.NORMAL);&lt;br /&gt;
    styledText.setFont(font);&lt;br /&gt;
    &lt;br /&gt;
    styledText.setText(&amp;quot;123456789\r\nABCDEFGHI&amp;quot;);&lt;br /&gt;
    &lt;br /&gt;
    StyleRange styleRange1 = new StyleRange();&lt;br /&gt;
    styleRange1.start = 2;&lt;br /&gt;
    styleRange1.length = 16;&lt;br /&gt;
    styleRange1.foreground = shell.getDisplay().getSystemColor(SWT.COLOR_BLUE);&lt;br /&gt;
    styleRange1.background = shell.getDisplay().getSystemColor(SWT.COLOR_YELLOW);&lt;br /&gt;
    styleRange1.fontStyle = SWT.BOLD;&lt;br /&gt;
    &lt;br /&gt;
    StyleRange styleRange2 = new StyleRange();&lt;br /&gt;
    styleRange2.start = 14;&lt;br /&gt;
    styleRange2.length = 3;&lt;br /&gt;
    styleRange2.fontStyle = SWT.NORMAL;&lt;br /&gt;
    styleRange2.foreground = shell.getDisplay().getSystemColor(SWT.COLOR_YELLOW);&lt;br /&gt;
    styleRange2.background = shell.getDisplay().getSystemColor(SWT.COLOR_BLUE);&lt;br /&gt;
    &lt;br /&gt;
//    styledText.setStyleRange(styleRange1);&lt;br /&gt;
//    styledText.setStyleRange(styleRange2);&lt;br /&gt;
    &lt;br /&gt;
    //styledText.setStyleRanges(new StyleRange[]{styleRange1, styleRange2});&lt;br /&gt;
    //styledText.setStyleRanges(new StyleRange[]{styleRange2, styleRange1});&lt;br /&gt;
    &lt;br /&gt;
    //styledText.setLineBackground(1, 1, shell.getDisplay().getSystemColor(SWT.COLOR_GRAY));&lt;br /&gt;
    &lt;br /&gt;
//    styledText.setSelection(4);&lt;br /&gt;
//    System.out.println(printStyleRanges(styledText.getStyleRanges()) );&lt;br /&gt;
//    styledText.insert(&amp;quot;000&amp;quot;);&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    System.out.println(printStyleRanges(styledText.getStyleRanges()) );&lt;br /&gt;
    &lt;br /&gt;
//    styledText.setStyleRanges(new StyleRange[]{styleRange1});&lt;br /&gt;
//    System.out.println(printStyleRanges(styledText.getStyleRanges()) );&lt;br /&gt;
    &lt;br /&gt;
    //shell.pack();&lt;br /&gt;
    shell.setSize(300, 120);&lt;br /&gt;
    shell.open();&lt;br /&gt;
    //textUser.forceFocus();&lt;br /&gt;
    // Set up the event loop.&lt;br /&gt;
    while (!shell.isDisposed()) {&lt;br /&gt;
      if (!display.readAndDispatch()) {&lt;br /&gt;
        // If no more entries in event queue&lt;br /&gt;
        display.sleep();&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    display.dispose();&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  private String printStyleRanges(StyleRange[] styleRanges) {&lt;br /&gt;
    &lt;br /&gt;
    if(styleRanges == null)&lt;br /&gt;
      return &amp;quot;null&amp;quot;;&lt;br /&gt;
    else if(styleRanges.length == 0)&lt;br /&gt;
      return &amp;quot;[]&amp;quot;;&lt;br /&gt;
    &lt;br /&gt;
    StringBuffer sb = new StringBuffer();&lt;br /&gt;
    for(int i=0; i&amp;lt;styleRanges.length; i++) {&lt;br /&gt;
      sb.append(styleRanges[i] + &amp;quot;\n&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    return sb.toString();&lt;br /&gt;
  }&lt;br /&gt;
  private void init() {&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    new SampleStyledText();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Search Style Text ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/******************************************************************************&lt;br /&gt;
 * All Right Reserved. &lt;br /&gt;
 * Copyright (c) 1998, 2004 Jackwind Li Guojie&lt;br /&gt;
 * &lt;br /&gt;
 * Created on Feb 22, 2004 12:43:18 AM by JACK&lt;br /&gt;
 * $Id$&lt;br /&gt;
 * &lt;br /&gt;
 *****************************************************************************/&lt;br /&gt;
&lt;br /&gt;
import java.util.LinkedList;&lt;br /&gt;
import org.eclipse.swt.SWT;&lt;br /&gt;
import org.eclipse.swt.custom.LineStyleEvent;&lt;br /&gt;
import org.eclipse.swt.custom.LineStyleListener;&lt;br /&gt;
import org.eclipse.swt.custom.StyleRange;&lt;br /&gt;
import org.eclipse.swt.custom.StyledText;&lt;br /&gt;
import org.eclipse.swt.events.SelectionAdapter;&lt;br /&gt;
import org.eclipse.swt.events.SelectionEvent;&lt;br /&gt;
import org.eclipse.swt.graphics.Font;&lt;br /&gt;
import org.eclipse.swt.layout.GridData;&lt;br /&gt;
import org.eclipse.swt.layout.GridLayout;&lt;br /&gt;
import org.eclipse.swt.widgets.Button;&lt;br /&gt;
import org.eclipse.swt.widgets.Display;&lt;br /&gt;
import org.eclipse.swt.widgets.Shell;&lt;br /&gt;
import org.eclipse.swt.widgets.Text;&lt;br /&gt;
public class SearchStyleText {&lt;br /&gt;
  Display display = new Display();&lt;br /&gt;
  Shell shell = new Shell(display);&lt;br /&gt;
  StyledText styledText;&lt;br /&gt;
  Text keywordText;&lt;br /&gt;
  Button button;&lt;br /&gt;
  &lt;br /&gt;
  String keyword;&lt;br /&gt;
  &lt;br /&gt;
  public SearchStyleText() {&lt;br /&gt;
    shell.setLayout(new GridLayout(2, false));&lt;br /&gt;
    &lt;br /&gt;
    styledText = new StyledText(shell, SWT.MULTI | SWT.WRAP | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);&lt;br /&gt;
    GridData gridData = new GridData(GridData.FILL_BOTH);&lt;br /&gt;
    gridData.horizontalSpan = 2;    &lt;br /&gt;
    styledText.setLayoutData(gridData);&lt;br /&gt;
    &lt;br /&gt;
    keywordText = new Text(shell, SWT.SINGLE | SWT.BORDER);&lt;br /&gt;
    keywordText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));&lt;br /&gt;
    Font font = new Font(shell.getDisplay(), &amp;quot;Courier New&amp;quot;, 12, SWT.NORMAL);&lt;br /&gt;
    styledText.setFont(font);&lt;br /&gt;
    &lt;br /&gt;
    button = new Button(shell, SWT.PUSH);&lt;br /&gt;
    button.setText(&amp;quot;Search&amp;quot;);&lt;br /&gt;
    button.addSelectionListener(new SelectionAdapter() {&lt;br /&gt;
      public void widgetSelected(SelectionEvent e) {&lt;br /&gt;
        keyword = keywordText.getText();&lt;br /&gt;
        styledText.redraw();&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    &lt;br /&gt;
    styledText.addLineStyleListener(new LineStyleListener() {&lt;br /&gt;
      public void lineGetStyle(LineStyleEvent event) {&lt;br /&gt;
        if(keyword == null || keyword.length() == 0) {&lt;br /&gt;
          event.styles = new StyleRange[0];&lt;br /&gt;
          return;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        String line = event.lineText;&lt;br /&gt;
        int cursor = -1;&lt;br /&gt;
        &lt;br /&gt;
        LinkedList list = new LinkedList();&lt;br /&gt;
        while( (cursor = line.indexOf(keyword, cursor+1)) &amp;gt;= 0) {&lt;br /&gt;
          list.add(getHighlightStyle(event.lineOffset+cursor, keyword.length()));&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        event.styles = (StyleRange[]) list.toArray(new StyleRange[list.size()]);&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    &lt;br /&gt;
    keyword = &amp;quot;SW&amp;quot;;&lt;br /&gt;
    &lt;br /&gt;
    styledText.setText(&amp;quot;AWT, SWING \r\nSWT &amp;amp; JFACE&amp;quot;);&lt;br /&gt;
    &lt;br /&gt;
    shell.pack();&lt;br /&gt;
    shell.open();&lt;br /&gt;
    //textUser.forceFocus();&lt;br /&gt;
    // Set up the event loop.&lt;br /&gt;
    while (!shell.isDisposed()) {&lt;br /&gt;
      if (!display.readAndDispatch()) {&lt;br /&gt;
        // If no more entries in event queue&lt;br /&gt;
        display.sleep();&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    display.dispose();&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  private StyleRange getHighlightStyle(int startOffset, int length) {&lt;br /&gt;
    StyleRange styleRange = new StyleRange();&lt;br /&gt;
    styleRange.start = startOffset;&lt;br /&gt;
    styleRange.length = length;&lt;br /&gt;
    styleRange.background = shell.getDisplay().getSystemColor(SWT.COLOR_YELLOW);&lt;br /&gt;
    return styleRange;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    new SearchStyleText();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SetLine Background  ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/******************************************************************************&lt;br /&gt;
 * All Right Reserved. &lt;br /&gt;
 * Copyright (c) 1998, 2004 Jackwind Li Guojie&lt;br /&gt;
 * &lt;br /&gt;
 * Created on Feb 22, 2004 12:11:04 AM by JACK&lt;br /&gt;
 * $Id$&lt;br /&gt;
 * &lt;br /&gt;
 *****************************************************************************/&lt;br /&gt;
&lt;br /&gt;
import org.eclipse.swt.SWT;&lt;br /&gt;
import org.eclipse.swt.custom.StyleRange;&lt;br /&gt;
import org.eclipse.swt.custom.StyledText;&lt;br /&gt;
import org.eclipse.swt.graphics.Font;&lt;br /&gt;
import org.eclipse.swt.layout.GridData;&lt;br /&gt;
import org.eclipse.swt.layout.GridLayout;&lt;br /&gt;
import org.eclipse.swt.widgets.Display;&lt;br /&gt;
import org.eclipse.swt.widgets.Shell;&lt;br /&gt;
public class SetLineBackground {&lt;br /&gt;
  Display display = new Display();&lt;br /&gt;
  Shell shell = new Shell(display);&lt;br /&gt;
  &lt;br /&gt;
  StyledText styledText;&lt;br /&gt;
  public SetLineBackground() {&lt;br /&gt;
    init();&lt;br /&gt;
    &lt;br /&gt;
    shell.setLayout(new GridLayout());&lt;br /&gt;
    &lt;br /&gt;
    styledText = new StyledText(shell, SWT.BORDER | SWT.MULTI | SWT.WRAP | SWT.H_SCROLL | SWT.V_SCROLL);&lt;br /&gt;
    &lt;br /&gt;
    styledText.setLayoutData(new GridData(GridData.FILL_BOTH));&lt;br /&gt;
&lt;br /&gt;
    Font font = new Font(shell.getDisplay(), &amp;quot;Courier New&amp;quot;, 12, SWT.NORMAL);&lt;br /&gt;
    styledText.setFont(font);&lt;br /&gt;
    &lt;br /&gt;
    styledText.setText(&amp;quot;abcdefg\r\nhijklmn&amp;quot;);&lt;br /&gt;
    &lt;br /&gt;
    StyleRange styleRange1 = new StyleRange();&lt;br /&gt;
    styleRange1.start = 2;&lt;br /&gt;
    styleRange1.length = 3;&lt;br /&gt;
    styleRange1.foreground = shell.getDisplay().getSystemColor(SWT.COLOR_BLUE);&lt;br /&gt;
    styleRange1.background = shell.getDisplay().getSystemColor(SWT.COLOR_YELLOW);&lt;br /&gt;
    styleRange1.fontStyle = SWT.BOLD;    &lt;br /&gt;
    &lt;br /&gt;
    styledText.setStyleRange(styleRange1);&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    styledText.setLineBackground(0, 1, shell.getDisplay().getSystemColor(SWT.COLOR_GREEN));&lt;br /&gt;
    styledText.setLineBackground(1, 1, shell.getDisplay().getSystemColor(SWT.COLOR_YELLOW));&lt;br /&gt;
    &lt;br /&gt;
    shell.setSize(300, 120);&lt;br /&gt;
    shell.open();&lt;br /&gt;
    //textUser.forceFocus();&lt;br /&gt;
    // Set up the event loop.&lt;br /&gt;
    while (!shell.isDisposed()) {&lt;br /&gt;
      if (!display.readAndDispatch()) {&lt;br /&gt;
        // If no more entries in event queue&lt;br /&gt;
        display.sleep();&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    display.dispose();&lt;br /&gt;
  }&lt;br /&gt;
  private void init() {&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    new SetLineBackground();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Setting the font style, foreground and background colors of StyledText ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Setting the font style, foreground and background colors of StyledText&lt;br /&gt;
 *&lt;br /&gt;
 * For a list of all SWT example snippets see&lt;br /&gt;
 * http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/platform-swt-home/dev.html#snippets&lt;br /&gt;
 */&lt;br /&gt;
import org.eclipse.swt.SWT;&lt;br /&gt;
import org.eclipse.swt.custom.StyleRange;&lt;br /&gt;
import org.eclipse.swt.custom.StyledText;&lt;br /&gt;
import org.eclipse.swt.layout.FillLayout;&lt;br /&gt;
import org.eclipse.swt.widgets.Display;&lt;br /&gt;
import org.eclipse.swt.widgets.Shell;&lt;br /&gt;
public class Snippet163 {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    Display display = new Display();&lt;br /&gt;
    Shell shell = new Shell(display);&lt;br /&gt;
    shell.setLayout(new FillLayout());&lt;br /&gt;
    StyledText text = new StyledText(shell, SWT.BORDER);&lt;br /&gt;
    text.setText(&amp;quot;0123456789 ABCDEFGHIJKLM NOPQRSTUVWXYZ&amp;quot;);&lt;br /&gt;
    // make 0123456789 appear bold&lt;br /&gt;
    StyleRange style1 = new StyleRange();&lt;br /&gt;
    style1.start = 0;&lt;br /&gt;
    style1.length = 10;&lt;br /&gt;
    style1.fontStyle = SWT.BOLD;&lt;br /&gt;
    text.setStyleRange(style1);&lt;br /&gt;
    // make ABCDEFGHIJKLM have a red font&lt;br /&gt;
    StyleRange style2 = new StyleRange();&lt;br /&gt;
    style2.start = 11;&lt;br /&gt;
    style2.length = 13;&lt;br /&gt;
    style2.foreground = display.getSystemColor(SWT.COLOR_RED);&lt;br /&gt;
    text.setStyleRange(style2);&lt;br /&gt;
    // make NOPQRSTUVWXYZ have a blue background&lt;br /&gt;
    StyleRange style3 = new StyleRange();&lt;br /&gt;
    style3.start = 25;&lt;br /&gt;
    style3.length = 13;&lt;br /&gt;
    style3.background = display.getSystemColor(SWT.COLOR_BLUE);&lt;br /&gt;
    text.setStyleRange(style3);&lt;br /&gt;
    shell.pack();&lt;br /&gt;
    shell.open();&lt;br /&gt;
    while (!shell.isDisposed()) {&lt;br /&gt;
      if (!display.readAndDispatch())&lt;br /&gt;
        display.sleep();&lt;br /&gt;
    }&lt;br /&gt;
    display.dispose();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Styled Text with highlighted Odd Line ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/******************************************************************************&lt;br /&gt;
 * All Right Reserved. &lt;br /&gt;
 * Copyright (c) 1998, 2004 Jackwind Li Guojie&lt;br /&gt;
 * &lt;br /&gt;
 * Created on Feb 22, 2004 1:29:05 AM by JACK&lt;br /&gt;
 * $Id$&lt;br /&gt;
 * &lt;br /&gt;
 *****************************************************************************/&lt;br /&gt;
import org.eclipse.swt.SWT;&lt;br /&gt;
import org.eclipse.swt.custom.LineBackgroundEvent;&lt;br /&gt;
import org.eclipse.swt.custom.LineBackgroundListener;&lt;br /&gt;
import org.eclipse.swt.custom.StyledText;&lt;br /&gt;
import org.eclipse.swt.layout.GridData;&lt;br /&gt;
import org.eclipse.swt.layout.GridLayout;&lt;br /&gt;
import org.eclipse.swt.widgets.Display;&lt;br /&gt;
import org.eclipse.swt.widgets.Shell;&lt;br /&gt;
public class HighlightOddLine {&lt;br /&gt;
  Display display = new Display();&lt;br /&gt;
  Shell shell = new Shell(display);&lt;br /&gt;
  &lt;br /&gt;
  StyledText styledText;&lt;br /&gt;
  &lt;br /&gt;
  public HighlightOddLine() {&lt;br /&gt;
    shell.setLayout(new GridLayout());&lt;br /&gt;
    &lt;br /&gt;
    styledText = new StyledText(shell, SWT.MULTI | SWT.WRAP | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);&lt;br /&gt;
    styledText.setLayoutData(new GridData(GridData.FILL_BOTH));&lt;br /&gt;
    &lt;br /&gt;
    styledText.addLineBackgroundListener(new LineBackgroundListener() {&lt;br /&gt;
      public void lineGetBackground(LineBackgroundEvent event) {&lt;br /&gt;
        if(styledText.getLineAtOffset(event.lineOffset) % 2 == 1)&lt;br /&gt;
          event.lineBackground = shell.getDisplay().getSystemColor(SWT.COLOR_YELLOW);&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    &lt;br /&gt;
    styledText.setText(&amp;quot;Line 0\r\nLine 1\r\nLine 2\r\nLine 3\r\nLine 4\r\nLine 5\r\nLine 6&amp;quot;);&lt;br /&gt;
    shell.setSize(300, 150);&lt;br /&gt;
    shell.open();&lt;br /&gt;
    //textUser.forceFocus();&lt;br /&gt;
    // Set up the event loop.&lt;br /&gt;
    while (!shell.isDisposed()) {&lt;br /&gt;
      if (!display.readAndDispatch()) {&lt;br /&gt;
        // If no more entries in event queue&lt;br /&gt;
        display.sleep();&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    display.dispose();&lt;br /&gt;
  }&lt;br /&gt;
  private void init() {&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    new HighlightOddLine();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SWT StyledText ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
SWT/JFace in Action&lt;br /&gt;
GUI Design with Eclipse 3.0&lt;br /&gt;
Matthew Scarpino, Stephen Holder, Stanford Ng, and Laurent Mihalkovic&lt;br /&gt;
ISBN: 1932394273&lt;br /&gt;
Publisher: Manning&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
import java.io.BufferedReader;&lt;br /&gt;
import java.io.BufferedWriter;&lt;br /&gt;
import java.io.File;&lt;br /&gt;
import java.io.FileReader;&lt;br /&gt;
import java.io.FileWriter;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.io.PrintWriter;&lt;br /&gt;
import java.util.StringTokenizer;&lt;br /&gt;
import org.eclipse.swt.SWT;&lt;br /&gt;
import org.eclipse.swt.custom.ExtendedModifyEvent;&lt;br /&gt;
import org.eclipse.swt.custom.ExtendedModifyListener;&lt;br /&gt;
import org.eclipse.swt.custom.StyleRange;&lt;br /&gt;
import org.eclipse.swt.custom.StyledText;&lt;br /&gt;
import org.eclipse.swt.events.KeyAdapter;&lt;br /&gt;
import org.eclipse.swt.events.KeyEvent;&lt;br /&gt;
import org.eclipse.swt.graphics.Point;&lt;br /&gt;
import org.eclipse.swt.layout.FillLayout;&lt;br /&gt;
import org.eclipse.swt.widgets.ruposite;&lt;br /&gt;
public class Ch5Persistent extends Composite {&lt;br /&gt;
  private static final String END_STYLES_MARK = &amp;quot;***EndStyles***&amp;quot;;&lt;br /&gt;
  private static final String START_STYLES_MARK = &amp;quot;***Styles***&amp;quot;;&lt;br /&gt;
  private static final String START_TEXT_MARK = &amp;quot;***Text***&amp;quot;;&lt;br /&gt;
  private static final String FILE_NAME = &amp;quot;editorData.txt&amp;quot;;&lt;br /&gt;
  private boolean doBold = false;&lt;br /&gt;
  private StyledText styledText;&lt;br /&gt;
  public Ch5Persistent(Composite parent) {&lt;br /&gt;
    super(parent, SWT.NONE);&lt;br /&gt;
    buildControls();&lt;br /&gt;
  }&lt;br /&gt;
  protected void buildControls() {&lt;br /&gt;
    this.setLayout(new FillLayout());&lt;br /&gt;
    styledText = new StyledText(this, SWT.MULTI | SWT.V_SCROLL);&lt;br /&gt;
    load();&lt;br /&gt;
    styledText.addExtendedModifyListener(new ExtendedModifyListener() {&lt;br /&gt;
      public void modifyText(ExtendedModifyEvent event) {&lt;br /&gt;
        if (doBold) {&lt;br /&gt;
          StyleRange style = new StyleRange(event.start,&lt;br /&gt;
              event.length, null, null, SWT.BOLD);&lt;br /&gt;
          styledText.setStyleRange(style);&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    styledText.addKeyListener(new KeyAdapter() {&lt;br /&gt;
      public void keyPressed(KeyEvent e) {&lt;br /&gt;
        switch (e.keyCode) {&lt;br /&gt;
        case SWT.F1:&lt;br /&gt;
          toggleBold();&lt;br /&gt;
          break;&lt;br /&gt;
        default:&lt;br /&gt;
        //ignore everything else&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
  private void toggleBold() {&lt;br /&gt;
    doBold = !doBold;&lt;br /&gt;
    if (styledText.getSelectionCount() &amp;gt; 0) {&lt;br /&gt;
      Point selectionRange = styledText.getSelectionRange();&lt;br /&gt;
      StyleRange style = new StyleRange(selectionRange.x,&lt;br /&gt;
          selectionRange.y, null, null, doBold ? SWT.BOLD&lt;br /&gt;
              : SWT.NORMAL);&lt;br /&gt;
      styledText.setStyleRange(style);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  private void load() {&lt;br /&gt;
    File file = new File(FILE_NAME);&lt;br /&gt;
    if (file.exists()) {&lt;br /&gt;
      try {&lt;br /&gt;
        BufferedReader reader = new BufferedReader(new FileReader(file));&lt;br /&gt;
        String currLine = reader.readLine();&lt;br /&gt;
        StringTokenizer tokenizer = new StringTokenizer(currLine);&lt;br /&gt;
        tokenizer.nextToken(); //discard START_TEXT_MARKER&lt;br /&gt;
        String contentLengthString = tokenizer.nextToken();&lt;br /&gt;
        int contentLength = Integer.parseInt(contentLengthString);&lt;br /&gt;
        readContent(reader, contentLength);&lt;br /&gt;
        //find the beginning of the styles section&lt;br /&gt;
        while (((currLine = reader.readLine()) != null)&lt;br /&gt;
            &amp;amp;&amp;amp; !START_STYLES_MARK.equals(currLine))&lt;br /&gt;
          ;&lt;br /&gt;
        readStyles(reader, currLine);&lt;br /&gt;
        reader.close();&lt;br /&gt;
      } catch (IOException e) {&lt;br /&gt;
        e.printStackTrace();&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  private void readStyles(BufferedReader reader, String currLine)&lt;br /&gt;
      throws IOException {&lt;br /&gt;
    while (!END_STYLES_MARK.equals(currLine)) {&lt;br /&gt;
      currLine = reader.readLine();&lt;br /&gt;
      if (!END_STYLES_MARK.equals(currLine))&lt;br /&gt;
        buildOneStyle(currLine);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  private void readContent(BufferedReader reader, int contentLength)&lt;br /&gt;
      throws IOException {&lt;br /&gt;
    char[] buffer = new char[contentLength];&lt;br /&gt;
    reader.read(buffer, 0, contentLength);&lt;br /&gt;
    styledText.append(new String(buffer));&lt;br /&gt;
  }&lt;br /&gt;
  private void buildOneStyle(String styleText) {&lt;br /&gt;
    StringTokenizer tokenizer = new StringTokenizer(styleText);&lt;br /&gt;
    int startPos = Integer.parseInt(tokenizer.nextToken());&lt;br /&gt;
    int length = Integer.parseInt(tokenizer.nextToken());&lt;br /&gt;
    StyleRange style = new StyleRange(startPos, length, null, null,&lt;br /&gt;
        SWT.BOLD);&lt;br /&gt;
    styledText.setStyleRange(style);&lt;br /&gt;
  }&lt;br /&gt;
  private void save() {&lt;br /&gt;
    try {&lt;br /&gt;
      PrintWriter writer = new PrintWriter(new BufferedWriter(&lt;br /&gt;
          new FileWriter(FILE_NAME)));&lt;br /&gt;
      String text = styledText.getText();&lt;br /&gt;
      writer.println(START_TEXT_MARK + &amp;quot; &amp;quot; + text.length());&lt;br /&gt;
      writer.println(text);&lt;br /&gt;
      writer.println(START_STYLES_MARK);&lt;br /&gt;
      StyleRange[] styles = styledText.getStyleRanges();&lt;br /&gt;
      for (int i = 0; i &amp;lt; styles.length; i++) {&lt;br /&gt;
        writer.println(styles[i].start + &amp;quot; &amp;quot; + styles[i].length);&lt;br /&gt;
      }&lt;br /&gt;
      writer.println(END_STYLES_MARK);&lt;br /&gt;
      writer.flush();&lt;br /&gt;
      writer.close();&lt;br /&gt;
    } catch (IOException e) {&lt;br /&gt;
      e.printStackTrace();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Text with underline and strike through ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import org.eclipse.swt.SWT;&lt;br /&gt;
import org.eclipse.swt.custom.StyleRange;&lt;br /&gt;
import org.eclipse.swt.custom.StyledText;&lt;br /&gt;
import org.eclipse.swt.layout.FillLayout;&lt;br /&gt;
import org.eclipse.swt.widgets.Display;&lt;br /&gt;
import org.eclipse.swt.widgets.Shell;&lt;br /&gt;
/*&lt;br /&gt;
 * Text with underline and strike through&lt;br /&gt;
 * &lt;br /&gt;
 * For a list of all SWT example snippets see&lt;br /&gt;
 * http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/platform-swt-home/dev.html#snippets&lt;br /&gt;
 */&lt;br /&gt;
public class Snippet189 {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    Display display = new Display();&lt;br /&gt;
    Shell shell = new Shell(display);&lt;br /&gt;
    shell.setText(&amp;quot;StyledText with underline and strike through&amp;quot;);&lt;br /&gt;
    shell.setLayout(new FillLayout());&lt;br /&gt;
    StyledText text = new StyledText(shell, SWT.BORDER);&lt;br /&gt;
    text.setText(&amp;quot;0123456789 ABCDEFGHIJKLM NOPQRSTUVWXYZ&amp;quot;);&lt;br /&gt;
    // make 0123456789 appear underlined&lt;br /&gt;
    StyleRange style1 = new StyleRange();&lt;br /&gt;
    style1.start = 0;&lt;br /&gt;
    style1.length = 10;&lt;br /&gt;
    style1.underline = true;&lt;br /&gt;
    text.setStyleRange(style1);&lt;br /&gt;
    // make ABCDEFGHIJKLM have a strike through&lt;br /&gt;
    StyleRange style2 = new StyleRange();&lt;br /&gt;
    style2.start = 11;&lt;br /&gt;
    style2.length = 13;&lt;br /&gt;
    style2.strikeout = true;&lt;br /&gt;
    text.setStyleRange(style2);&lt;br /&gt;
    // make NOPQRSTUVWXYZ appear underlined and have a strike through&lt;br /&gt;
    StyleRange style3 = new StyleRange();&lt;br /&gt;
    style3.start = 25;&lt;br /&gt;
    style3.length = 13;&lt;br /&gt;
    style3.underline = true;&lt;br /&gt;
    style3.strikeout = true;&lt;br /&gt;
    text.setStyleRange(style3);&lt;br /&gt;
    shell.pack();&lt;br /&gt;
    shell.open();&lt;br /&gt;
    while (!shell.isDisposed()) {&lt;br /&gt;
      if (!display.readAndDispatch())&lt;br /&gt;
        display.sleep();&lt;br /&gt;
    }&lt;br /&gt;
    display.dispose();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;/div&gt;</summary>
			</entry>

	</feed>