Java Tutorial/SWT/StyledText LineStyle

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

Creating a LineStyleListener

To create a LineStyleListener that sets all "e" characters to red



   <source lang="java">

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.widgets.Display; import org.eclipse.swt.widgets.Shell; public class LineStyleListenerCreating {

 public static void main(String[] args) {
   final Display display = new Display();
   final Shell shell = new Shell(display);
   final StyledText styledText = new StyledText(shell, SWT.V_SCROLL | SWT.BORDER);
   styledText.addLineStyleListener(new LineStyleListener() {
     public void lineGetStyle(LineStyleEvent event) {
       java.util.List styles = new java.util.ArrayList();
       for (int i = 0, n = event.lineText.length(); i < n; i++) {
         if (event.lineText.charAt(i) == "e") {
           int start = i;
           while (i < n && event.lineText.charAt(i) == "e"){
             i++;
           }
           styles.add(new StyleRange(event.lineOffset + start, i - start, display
               .getSystemColor(SWT.COLOR_BLUE), null));
         }
       }
       event.styles = (StyleRange[]) styles.toArray(new StyleRange[0]);
     }
   });
   styledText.setBounds(10, 10, 500, 100);
   shell.open();
   while (!shell.isDisposed()) {
     if (!display.readAndDispatch()) {
       display.sleep();
     }
   }
   display.dispose();
 }

}</source>





Crossing Lines

StyledText offers three methods for redrawing its contents.



   <source lang="java">

void redraw(): redraws the entire contents of the StyledText.</source>





Using a LineStyleListener

LineStyleListeners examine single lines at a time.

LineStyleEvent Fields

FieldDescriptionint lineOffsetThe zero-based offset, relative to the whole text, of the line the StyledText needs style information for. Note: this is the character offset, not the line number.String lineTextThe text of the line the StyledText needs style information for.StyleRange [] stylesThe array that holds the StyleRange objects you create for the line.

To calcualate the offset for StyleRanges



   <source lang="java">

int styleRangeOffset = offsetIntoLine + event.lineOffset;</source>