トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

StyledText

StyledTextはテキストに対して色やフォントといったスタイルを指定することのできるウィジェットです。スタイルの設定にはStyleRangeクラスを使用します。

import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StyleRange;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class StyledTextSample {
  public static void main (String [] args) {
    Display display = new Display ();
    Shell shell = new Shell(display);
    shell.setText("StyledText Sample");
    shell.setLayout(new FillLayout());
    
    // StyledTextウィジェットを生成
    StyledText text = new StyledText(shell,SWT.BORDER|SWT.H_SCROLL|SWT.V_SCROLL);
    text.setText("ほげほげはげはげ");
    
    // 先頭から4文字目までにスタイルを設定
    Color color = display.getSystemColor(SWT.COLOR_RED);
    StyleRange styleRange = new StyleRange();
    styleRange.start  = 0;
    styleRange.length = 4;
    styleRange.fontStyle = SWT.BOLD;
    styleRange.foreground = color;
    text.setStyleRange(styleRange);
    
    // ウィンドウのサイズを指定
    shell.setSize(200,100);
    shell.open();
    while (!shell.isDisposed ()){
      if (!display.readAndDispatch ()){
        display.sleep ();
      }
    }
    display.dispose ();
  }
}

上記のコードを実行すると以下のようになります。

特定のキーワードを強調表示するようなエディタを作成する場合、LineStyleListenerを使用します。以下のリスナはhelloという文字列に対して文字色を設定します。

public static class HilightListener implements LineStyleListener {
  
  private Color color;
  
  public HilightListener(Color color){
    this.color = color;
  }
  
  public void lineGetStyle(LineStyleEvent event) {
    String text = event.lineText;
    int lastIndex = 0;
    int index = 0;
    ArrayList styles = new ArrayList();
    while((index=text.indexOf("hello",lastIndex))!=-1){
      StyleRange range = new StyleRange();
      range.start  = event.lineOffset + index;
      range.length = 5;
      range.foreground = color;
      styles.add(range);
      lastIndex = index + 5;
    }
    event.styles = (StyleRange[])styles.toArray(new StyleRange[styles.size()]);
  }
}

以下のようにしてStyledTextにLineStyleListenerを追加します。

StyledText text = new StyledText(shell,SWT.BORDER|SWT.H_SCROLL|SWT.V_SCROLL);
Color red = display.getSystemColor(SWT.COLOR_RED);
text.addLineStyleListener(new HilightListener(red));

最終更新時間:2004年08月27日 03時29分27秒