Java/SWT JFace Eclipse/StyledText

Материал из Java эксперт
Перейти к: навигация, поиск

Demonstrates StyleRanges

   <source lang="java">

//Send questions, comments, bug reports, etc. to the authors: //Rob Warner (rwarner@interspatial.ru) //Robert Harris (rbrt_harris@yahoo.ru) import org.eclipse.swt.SWT; import org.eclipse.swt.custom.*; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.layout.*; import org.eclipse.swt.widgets.*; /**

* This class demonstrates StyleRanges
*/

public class StyleRangeTest {

 private Color orange;
 private Color blue;
 /**
  * Runs the application
  */
 public void run() {
   Display display = new Display();
   Shell shell = new Shell(display);
   // Create colors for style ranges
   orange = new Color(display, 255, 127, 0);
   blue = display.getSystemColor(SWT.COLOR_BLUE);
   createContents(shell);
   shell.open();
   while (!shell.isDisposed()) {
     if (!display.readAndDispatch()) {
       display.sleep();
     }
   }
   // We created orange, but not blue
   orange.dispose();
   display.dispose();
 }
 /**
  * Creates the main window contents
  * 
  * @param shell the main window
  */
 private void createContents(Shell shell) {
   shell.setLayout(new FillLayout());
   // Create the StyledText
   StyledText styledText = new StyledText(shell, SWT.BORDER);
   // Set the text
   styledText.setText("Go Gators");
   /*
    * The multiple setStyleRange() method // Turn all of the text orange, with
    * the default background color styledText.setStyleRange(new StyleRange(0, 9,
    * orange, null));
    *  // Turn "Gators" blue styledText.setStyleRange(new StyleRange(3, 6, blue,
    * null));
    */
   /*
    * The setStyleRanges() method // Create the array to hold the StyleRanges
    * StyleRange[] ranges = new StyleRange[2];
    *  // Create the first StyleRange, making sure not to overlap. Include the
    * space. ranges[0] = new StyleRange(0, 3, orange, null);
    *  // Create the second StyleRange ranges[1] = new StyleRange(3, 6, blue,
    * null);
    *  // Replace all the StyleRanges for the StyledText
    * styledText.setStyleRanges(ranges);
    */
   /* The replaceStyleRanges() method */
   // Create the array to hold the StyleRanges
   StyleRange[] ranges = new StyleRange[2];
   // Create the first StyleRange, making sure not to overlap. Include the
   // space.
   ranges[0] = new StyleRange(0, 3, orange, null);
   // Create the second StyleRange
   ranges[1] = new StyleRange(3, 6, blue, null);
   // Replace only the StyleRanges in the affected area
   styledText.replaceStyleRanges(0, 9, ranges);
 }
 /**
  * The application entry point
  * 
  * @param args the command line arguments
  */
 public static void main(String[] args) {
   new StyleRangeTest().run();
 }

}


      </source>
   
  
 
  



Implements syntax coloring using the StyledText API

   <source lang="java">

//Send questions, comments, bug reports, etc. to the authors: //Rob Warner (rwarner@interspatial.ru) //Robert Harris (rbrt_harris@yahoo.ru) import java.util.*; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.*; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.layout.*; import org.eclipse.swt.widgets.*; /**

* This class implements syntax coloring using the StyledText API
*/

public class SyntaxTest {

 // Punctuation
 private static final String PUNCTUATION = "(){};!&|.+-*/";
 // Color for the StyleRanges
 private Color red;
 /**
  * Runs the application
  */
 public void run() {
   Display display = new Display();
   Shell shell = new Shell(display);
   // Get color for style ranges
   red = display.getSystemColor(SWT.COLOR_RED);
   createContents(shell);
   shell.open();
   while (!shell.isDisposed()) {
     if (!display.readAndDispatch()) {
       display.sleep();
     }
   }
   // No need to dispose red
   display.dispose();
 }
 /**
  * Creates the main window contents
  * 
  * @param shell the main window
  */
 private void createContents(Shell shell) {
   shell.setLayout(new FillLayout());
   // Create the StyledText
   final StyledText styledText = new StyledText(shell, SWT.BORDER);
   // Add the syntax coloring handler
   styledText.addExtendedModifyListener(new ExtendedModifyListener() {
     public void modifyText(ExtendedModifyEvent event) {
       // Determine the ending offset
       int end = event.start + event.length - 1;
       // If they typed something, get it
       if (event.start <= end) {
         // Get the text
         String text = styledText.getText(event.start, end);
         // Create a collection to hold the StyleRanges
         java.util.List ranges = new java.util.ArrayList();
         // Turn any punctuation red
         for (int i = 0, n = text.length(); i < n; i++) {
           if (PUNCTUATION.indexOf(text.charAt(i)) > -1) {
             ranges.add(new StyleRange(event.start + i, 1, red, null, SWT.BOLD));
           }
         }
         // If we have any ranges to set, set them
         if (!ranges.isEmpty()) {
           styledText.replaceStyleRanges(event.start, event.length,
               (StyleRange[]) ranges.toArray(new StyleRange[0]));
         }
       }
     }
   });
 }
 /**
  * The application entry point
  * 
  * @param args the command line arguments
  */
 public static void main(String[] args) {
   new SyntaxTest().run();
 }

} //Send questions, comments, bug reports, etc. to the authors: //Rob Warner (rwarner@interspatial.ru) //Robert Harris (rbrt_harris@yahoo.ru) /**

* This class contains information for syntax coloring and styling for an
* extension
*/

class SyntaxData {

 private String extension;
 private Collection keywords;
 private String punctuation;
 private String comment;
 private String multiLineCommentStart;
 private String multiLineCommentEnd;
 /**
  * Constructs a SyntaxData
  * 
  * @param extension the extension
  */
 public SyntaxData(String extension) {
   this.extension = extension;
 }
 /**
  * Gets the extension
  * 
  * @return String
  */
 public String getExtension() {
   return extension;
 }
 /**
  * Gets the comment
  * 
  * @return String
  */
 public String getComment() {
   return comment;
 }
 /**
  * Sets the comment
  * 
  * @param comment The comment to set.
  */
 public void setComment(String comment) {
   this.rument = comment;
 }
 /**
  * Gets the keywords
  * 
  * @return Collection
  */
 public Collection getKeywords() {
   return keywords;
 }
 /**
  * Sets the keywords
  * 
  * @param keywords The keywords to set.
  */
 public void setKeywords(Collection keywords) {
   this.keywords = keywords;
 }
 /**
  * Gets the multi-line comment end
  * 
  * @return String
  */
 public String getMultiLineCommentEnd() {
   return multiLineCommentEnd;
 }
 /**
  * Sets the multi-line comment end
  * 
  * @param multiLineCommentEnd The multiLineCommentEnd to set.
  */
 public void setMultiLineCommentEnd(String multiLineCommentEnd) {
   this.multiLineCommentEnd = multiLineCommentEnd;
 }
 /**
  * Gets the multi-line comment start
  * 
  * @return String
  */
 public String getMultiLineCommentStart() {
   return multiLineCommentStart;
 }
 /**
  * Sets the multi-line comment start
  * 
  * @param multiLineCommentStart The multiLineCommentStart to set.
  */
 public void setMultiLineCommentStart(String multiLineCommentStart) {
   this.multiLineCommentStart = multiLineCommentStart;
 }
 /**
  * Gets the punctuation
  * 
  * @return String
  */
 public String getPunctuation() {
   return punctuation;
 }
 /**
  * Sets the punctuation
  * 
  * @param punctuation The punctuation to set.
  */
 public void setPunctuation(String punctuation) {
   this.punctuation = punctuation;
 }

} //Send questions, comments, bug reports, etc. to the authors: //Rob Warner (rwarner@interspatial.ru) //Robert Harris (rbrt_harris@yahoo.ru) /**

* This class manages the syntax coloring and styling data
*/

class SyntaxManager {

 // Lazy cache of SyntaxData objects
 private static Map data = new Hashtable();
 /**
  * Gets the syntax data for an extension
  */
 public static synchronized SyntaxData getSyntaxData(String extension) {
   // Check in cache
   SyntaxData sd = (SyntaxData) data.get(extension);
   if (sd == null) {
     // Not in cache; load it and put in cache
     sd = loadSyntaxData(extension);
     if (sd != null) data.put(sd.getExtension(), sd);
   }
   return sd;
 }
 /**
  * Loads the syntax data for an extension
  * 
  * @param extension the extension to load
  * @return SyntaxData
  */
 private static SyntaxData loadSyntaxData(String extension) {
   SyntaxData sd = null;
   try {
     ResourceBundle rb = ResourceBundle.getBundle("examples.ch11." + extension);
     sd = new SyntaxData(extension);
     sd.setComment(rb.getString("comment"));
     sd.setMultiLineCommentStart(rb.getString("multilinecommentstart"));
     sd.setMultiLineCommentEnd(rb.getString("multilinecommentend"));
     // Load the keywords
     Collection keywords = new ArrayList();
     for (StringTokenizer st = new StringTokenizer(rb.getString("keywords"), " "); st
         .hasMoreTokens();) {
       keywords.add(st.nextToken());
     }
     sd.setKeywords(keywords);
     // Load the punctuation
     sd.setPunctuation(rb.getString("punctuation"));
   } catch (MissingResourceException e) {
     // Ignore
   }
   return sd;
 }

}


      </source>
   
  
 
  



Sample Styled Text

   <source lang="java">

/******************************************************************************

* All Right Reserved. 
* Copyright (c) 1998, 2004 Jackwind Li Guojie
* 
* Created on Feb 19, 2004 8:49:16 PM by JACK
* $Id$
* 
*****************************************************************************/

import org.eclipse.swt.SWT; import org.eclipse.swt.custom.StyleRange; import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; public class SampleStyledText {

 Display display = new Display();
 Shell shell = new Shell(display);
 
 StyledText styledText;
 public SampleStyledText() {
   init();
   
   shell.setLayout(new GridLayout());
   
   styledText = new StyledText(shell, SWT.MULTI | SWT.WRAP | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
   
   styledText.setLayoutData(new GridData(GridData.FILL_BOTH));
   
   Font font = new Font(shell.getDisplay(), "Courier New", 12, SWT.NORMAL);
   styledText.setFont(font);
   
   styledText.setText("123456789\r\nABCDEFGHI");
   
   StyleRange styleRange1 = new StyleRange();
   styleRange1.start = 2;
   styleRange1.length = 16;
   styleRange1.foreground = shell.getDisplay().getSystemColor(SWT.COLOR_BLUE);
   styleRange1.background = shell.getDisplay().getSystemColor(SWT.COLOR_YELLOW);
   styleRange1.fontStyle = SWT.BOLD;
   
   StyleRange styleRange2 = new StyleRange();
   styleRange2.start = 14;
   styleRange2.length = 3;
   styleRange2.fontStyle = SWT.NORMAL;
   styleRange2.foreground = shell.getDisplay().getSystemColor(SWT.COLOR_YELLOW);
   styleRange2.background = shell.getDisplay().getSystemColor(SWT.COLOR_BLUE);
   

// styledText.setStyleRange(styleRange1); // styledText.setStyleRange(styleRange2);

   //styledText.setStyleRanges(new StyleRange[]{styleRange1, styleRange2});
   //styledText.setStyleRanges(new StyleRange[]{styleRange2, styleRange1});
   
   //styledText.setLineBackground(1, 1, shell.getDisplay().getSystemColor(SWT.COLOR_GRAY));
   

// styledText.setSelection(4); // System.out.println(printStyleRanges(styledText.getStyleRanges()) ); // styledText.insert("000");


   System.out.println(printStyleRanges(styledText.getStyleRanges()) );
   

// styledText.setStyleRanges(new StyleRange[]{styleRange1}); // System.out.println(printStyleRanges(styledText.getStyleRanges()) );

   //shell.pack();
   shell.setSize(300, 120);
   shell.open();
   //textUser.forceFocus();
   // Set up the event loop.
   while (!shell.isDisposed()) {
     if (!display.readAndDispatch()) {
       // If no more entries in event queue
       display.sleep();
     }
   }
   display.dispose();
 }
 
 private String printStyleRanges(StyleRange[] styleRanges) {
   
   if(styleRanges == null)
     return "null";
   else if(styleRanges.length == 0)
     return "[]";
   
   StringBuffer sb = new StringBuffer();
   for(int i=0; i<styleRanges.length; i++) {
     sb.append(styleRanges[i] + "\n");
   }
   
   return sb.toString();
 }
 private void init() {
 }
 public static void main(String[] args) {
   new SampleStyledText();
 }

}


      </source>
   
  
 
  



Search Style Text

   <source lang="java">

/******************************************************************************

* All Right Reserved. 
* Copyright (c) 1998, 2004 Jackwind Li Guojie
* 
* Created on Feb 22, 2004 12:43:18 AM by JACK
* $Id$
* 
*****************************************************************************/

import java.util.LinkedList; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.LineStyleEvent; import org.eclipse.swt.custom.LineStyleListener; import org.eclipse.swt.custom.StyleRange; import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Font; 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.Shell; import org.eclipse.swt.widgets.Text; public class SearchStyleText {

 Display display = new Display();
 Shell shell = new Shell(display);
 StyledText styledText;
 Text keywordText;
 Button button;
 
 String keyword;
 
 public SearchStyleText() {
   shell.setLayout(new GridLayout(2, false));
   
   styledText = new StyledText(shell, SWT.MULTI | SWT.WRAP | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
   GridData gridData = new GridData(GridData.FILL_BOTH);
   gridData.horizontalSpan = 2;    
   styledText.setLayoutData(gridData);
   
   keywordText = new Text(shell, SWT.SINGLE | SWT.BORDER);
   keywordText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
   Font font = new Font(shell.getDisplay(), "Courier New", 12, SWT.NORMAL);
   styledText.setFont(font);
   
   button = new Button(shell, SWT.PUSH);
   button.setText("Search");
   button.addSelectionListener(new SelectionAdapter() {
     public void widgetSelected(SelectionEvent e) {
       keyword = keywordText.getText();
       styledText.redraw();
     }
   });
   
   styledText.addLineStyleListener(new LineStyleListener() {
     public void lineGetStyle(LineStyleEvent event) {
       if(keyword == null || keyword.length() == 0) {
         event.styles = new StyleRange[0];
         return;
       }
       
       String line = event.lineText;
       int cursor = -1;
       
       LinkedList list = new LinkedList();
       while( (cursor = line.indexOf(keyword, cursor+1)) >= 0) {
         list.add(getHighlightStyle(event.lineOffset+cursor, keyword.length()));
       }
       
       event.styles = (StyleRange[]) list.toArray(new StyleRange[list.size()]);
     }
   });
   
   keyword = "SW";
   
   styledText.setText("AWT, SWING \r\nSWT & JFACE");
   
   shell.pack();
   shell.open();
   //textUser.forceFocus();
   // Set up the event loop.
   while (!shell.isDisposed()) {
     if (!display.readAndDispatch()) {
       // If no more entries in event queue
       display.sleep();
     }
   }
   display.dispose();
 }
 
 private StyleRange getHighlightStyle(int startOffset, int length) {
   StyleRange styleRange = new StyleRange();
   styleRange.start = startOffset;
   styleRange.length = length;
   styleRange.background = shell.getDisplay().getSystemColor(SWT.COLOR_YELLOW);
   return styleRange;
 }
 public static void main(String[] args) {
   new SearchStyleText();
 }

}


      </source>
   
  
 
  



SetLine Background

   <source lang="java">

/******************************************************************************

* All Right Reserved. 
* Copyright (c) 1998, 2004 Jackwind Li Guojie
* 
* Created on Feb 22, 2004 12:11:04 AM by JACK
* $Id$
* 
*****************************************************************************/

import org.eclipse.swt.SWT; import org.eclipse.swt.custom.StyleRange; import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; public class SetLineBackground {

 Display display = new Display();
 Shell shell = new Shell(display);
 
 StyledText styledText;
 public SetLineBackground() {
   init();
   
   shell.setLayout(new GridLayout());
   
   styledText = new StyledText(shell, SWT.BORDER | SWT.MULTI | SWT.WRAP | SWT.H_SCROLL | SWT.V_SCROLL);
   
   styledText.setLayoutData(new GridData(GridData.FILL_BOTH));
   Font font = new Font(shell.getDisplay(), "Courier New", 12, SWT.NORMAL);
   styledText.setFont(font);
   
   styledText.setText("abcdefg\r\nhijklmn");
   
   StyleRange styleRange1 = new StyleRange();
   styleRange1.start = 2;
   styleRange1.length = 3;
   styleRange1.foreground = shell.getDisplay().getSystemColor(SWT.COLOR_BLUE);
   styleRange1.background = shell.getDisplay().getSystemColor(SWT.COLOR_YELLOW);
   styleRange1.fontStyle = SWT.BOLD;    
   
   styledText.setStyleRange(styleRange1);
   
   
   styledText.setLineBackground(0, 1, shell.getDisplay().getSystemColor(SWT.COLOR_GREEN));
   styledText.setLineBackground(1, 1, shell.getDisplay().getSystemColor(SWT.COLOR_YELLOW));
   
   shell.setSize(300, 120);
   shell.open();
   //textUser.forceFocus();
   // Set up the event loop.
   while (!shell.isDisposed()) {
     if (!display.readAndDispatch()) {
       // If no more entries in event queue
       display.sleep();
     }
   }
   display.dispose();
 }
 private void init() {
 }
 public static void main(String[] args) {
   new SetLineBackground();
 }

}


      </source>
   
  
 
  



Setting the font style, foreground and background colors of StyledText

   <source lang="java">

/*

* Setting the font style, foreground and background colors of StyledText
*
* For a list of all SWT example snippets see
* http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/platform-swt-home/dev.html#snippets
*/

import org.eclipse.swt.SWT; import org.eclipse.swt.custom.StyleRange; import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; public class Snippet163 {

 public static void main(String[] args) {
   Display display = new Display();
   Shell shell = new Shell(display);
   shell.setLayout(new FillLayout());
   StyledText text = new StyledText(shell, SWT.BORDER);
   text.setText("0123456789 ABCDEFGHIJKLM NOPQRSTUVWXYZ");
   // make 0123456789 appear bold
   StyleRange style1 = new StyleRange();
   style1.start = 0;
   style1.length = 10;
   style1.fontStyle = SWT.BOLD;
   text.setStyleRange(style1);
   // make ABCDEFGHIJKLM have a red font
   StyleRange style2 = new StyleRange();
   style2.start = 11;
   style2.length = 13;
   style2.foreground = display.getSystemColor(SWT.COLOR_RED);
   text.setStyleRange(style2);
   // make NOPQRSTUVWXYZ have a blue background
   StyleRange style3 = new StyleRange();
   style3.start = 25;
   style3.length = 13;
   style3.background = display.getSystemColor(SWT.COLOR_BLUE);
   text.setStyleRange(style3);
   shell.pack();
   shell.open();
   while (!shell.isDisposed()) {
     if (!display.readAndDispatch())
       display.sleep();
   }
   display.dispose();
 }

}

      </source>
   
  
 
  



Styled Text with highlighted Odd Line

   <source lang="java">

/******************************************************************************

* All Right Reserved. 
* Copyright (c) 1998, 2004 Jackwind Li Guojie
* 
* Created on Feb 22, 2004 1:29:05 AM by JACK
* $Id$
* 
*****************************************************************************/

import org.eclipse.swt.SWT; import org.eclipse.swt.custom.LineBackgroundEvent; import org.eclipse.swt.custom.LineBackgroundListener; import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; public class HighlightOddLine {

 Display display = new Display();
 Shell shell = new Shell(display);
 
 StyledText styledText;
 
 public HighlightOddLine() {
   shell.setLayout(new GridLayout());
   
   styledText = new StyledText(shell, SWT.MULTI | SWT.WRAP | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
   styledText.setLayoutData(new GridData(GridData.FILL_BOTH));
   
   styledText.addLineBackgroundListener(new LineBackgroundListener() {
     public void lineGetBackground(LineBackgroundEvent event) {
       if(styledText.getLineAtOffset(event.lineOffset) % 2 == 1)
         event.lineBackground = shell.getDisplay().getSystemColor(SWT.COLOR_YELLOW);
     }
   });
   
   styledText.setText("Line 0\r\nLine 1\r\nLine 2\r\nLine 3\r\nLine 4\r\nLine 5\r\nLine 6");
   shell.setSize(300, 150);
   shell.open();
   //textUser.forceFocus();
   // Set up the event loop.
   while (!shell.isDisposed()) {
     if (!display.readAndDispatch()) {
       // If no more entries in event queue
       display.sleep();
     }
   }
   display.dispose();
 }
 private void init() {
 }
 public static void main(String[] args) {
   new HighlightOddLine();
 }

}


      </source>
   
  
 
  



SWT StyledText

   <source lang="java">

/* SWT/JFace in Action GUI Design with Eclipse 3.0 Matthew Scarpino, Stephen Holder, Stanford Ng, and Laurent Mihalkovic ISBN: 1932394273 Publisher: Manning

  • /

import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.StringTokenizer; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.ExtendedModifyEvent; import org.eclipse.swt.custom.ExtendedModifyListener; import org.eclipse.swt.custom.StyleRange; import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.events.KeyAdapter; import org.eclipse.swt.events.KeyEvent; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.ruposite; public class Ch5Persistent extends Composite {

 private static final String END_STYLES_MARK = "***EndStyles***";
 private static final String START_STYLES_MARK = "***Styles***";
 private static final String START_TEXT_MARK = "***Text***";
 private static final String FILE_NAME = "editorData.txt";
 private boolean doBold = false;
 private StyledText styledText;
 public Ch5Persistent(Composite parent) {
   super(parent, SWT.NONE);
   buildControls();
 }
 protected void buildControls() {
   this.setLayout(new FillLayout());
   styledText = new StyledText(this, SWT.MULTI | SWT.V_SCROLL);
   load();
   styledText.addExtendedModifyListener(new ExtendedModifyListener() {
     public void modifyText(ExtendedModifyEvent event) {
       if (doBold) {
         StyleRange style = new StyleRange(event.start,
             event.length, null, null, SWT.BOLD);
         styledText.setStyleRange(style);
       }
     }
   });
   styledText.addKeyListener(new KeyAdapter() {
     public void keyPressed(KeyEvent e) {
       switch (e.keyCode) {
       case SWT.F1:
         toggleBold();
         break;
       default:
       //ignore everything else
       }
     }
   });
 }
 private void toggleBold() {
   doBold = !doBold;
   if (styledText.getSelectionCount() > 0) {
     Point selectionRange = styledText.getSelectionRange();
     StyleRange style = new StyleRange(selectionRange.x,
         selectionRange.y, null, null, doBold ? SWT.BOLD
             : SWT.NORMAL);
     styledText.setStyleRange(style);
   }
 }
 private void load() {
   File file = new File(FILE_NAME);
   if (file.exists()) {
     try {
       BufferedReader reader = new BufferedReader(new FileReader(file));
       String currLine = reader.readLine();
       StringTokenizer tokenizer = new StringTokenizer(currLine);
       tokenizer.nextToken(); //discard START_TEXT_MARKER
       String contentLengthString = tokenizer.nextToken();
       int contentLength = Integer.parseInt(contentLengthString);
       readContent(reader, contentLength);
       //find the beginning of the styles section
       while (((currLine = reader.readLine()) != null)
           && !START_STYLES_MARK.equals(currLine))
         ;
       readStyles(reader, currLine);
       reader.close();
     } catch (IOException e) {
       e.printStackTrace();
     }
   }
 }
 private void readStyles(BufferedReader reader, String currLine)
     throws IOException {
   while (!END_STYLES_MARK.equals(currLine)) {
     currLine = reader.readLine();
     if (!END_STYLES_MARK.equals(currLine))
       buildOneStyle(currLine);
   }
 }
 private void readContent(BufferedReader reader, int contentLength)
     throws IOException {
   char[] buffer = new char[contentLength];
   reader.read(buffer, 0, contentLength);
   styledText.append(new String(buffer));
 }
 private void buildOneStyle(String styleText) {
   StringTokenizer tokenizer = new StringTokenizer(styleText);
   int startPos = Integer.parseInt(tokenizer.nextToken());
   int length = Integer.parseInt(tokenizer.nextToken());
   StyleRange style = new StyleRange(startPos, length, null, null,
       SWT.BOLD);
   styledText.setStyleRange(style);
 }
 private void save() {
   try {
     PrintWriter writer = new PrintWriter(new BufferedWriter(
         new FileWriter(FILE_NAME)));
     String text = styledText.getText();
     writer.println(START_TEXT_MARK + " " + text.length());
     writer.println(text);
     writer.println(START_STYLES_MARK);
     StyleRange[] styles = styledText.getStyleRanges();
     for (int i = 0; i < styles.length; i++) {
       writer.println(styles[i].start + " " + styles[i].length);
     }
     writer.println(END_STYLES_MARK);
     writer.flush();
     writer.close();
   } catch (IOException e) {
     e.printStackTrace();
   }
 }

}

      </source>
   
  
 
  



Text with underline and strike through

   <source lang="java">

import org.eclipse.swt.SWT; import org.eclipse.swt.custom.StyleRange; import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; /*

* Text with underline and strike through
* 
* For a list of all SWT example snippets see
* http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/platform-swt-home/dev.html#snippets
*/

public class Snippet189 {

 public static void main(String[] args) {
   Display display = new Display();
   Shell shell = new Shell(display);
   shell.setText("StyledText with underline and strike through");
   shell.setLayout(new FillLayout());
   StyledText text = new StyledText(shell, SWT.BORDER);
   text.setText("0123456789 ABCDEFGHIJKLM NOPQRSTUVWXYZ");
   // make 0123456789 appear underlined
   StyleRange style1 = new StyleRange();
   style1.start = 0;
   style1.length = 10;
   style1.underline = true;
   text.setStyleRange(style1);
   // make ABCDEFGHIJKLM have a strike through
   StyleRange style2 = new StyleRange();
   style2.start = 11;
   style2.length = 13;
   style2.strikeout = true;
   text.setStyleRange(style2);
   // make NOPQRSTUVWXYZ appear underlined and have a strike through
   StyleRange style3 = new StyleRange();
   style3.start = 25;
   style3.length = 13;
   style3.underline = true;
   style3.strikeout = true;
   text.setStyleRange(style3);
   shell.pack();
   shell.open();
   while (!shell.isDisposed()) {
     if (!display.readAndDispatch())
       display.sleep();
   }
   display.dispose();
 }

}

      </source>