HomeDigital EditionSys-Con RadioSearch Java Cd
Advanced Java AWT Book Reviews/Excerpts Client Server Corba Editorials Embedded Java Enterprise Java IDE's Industry Watch Integration Interviews Java Applet Java & Databases Java & Web Services Java Fundamentals Java Native Interface Java Servlets Java Beans J2ME Libraries .NET Object Orientation Observations/IMHO Product Reviews Scalability & Performance Security Server Side Source Code Straight Talking Swing Threads Using Java with others Wireless XML
 

"Text Controls by Swing"
Volume: 4 Issue: 6, p. 36

	

Listing 1: 

import com.sun.java.swing.*; 
import com.sun.java.swing.text.*; 
import java.util.*; 
import java.awt.*; 

public class CodeDocument extends DefaultStyledDocument{ 
  private String word = ""; 
  private SimpleAttributeSet bold = new SimpleAttributeSet(); 
  private SimpleAttributeSet normal = new SimpleAttributeSet(); 
  private int currentPos = 0; 
  private Vector keywords = new Vector(); 

  public CodeDocument() { 
   //set the bold attribute 
   StyleConstants.setBold(bold, true); 
  } 

  private void checkForKeyword(){ 
    int offs = this.currentPos; 
    Element element = this.getParagraphElement(offs); 
    String elementText = ""; 
    try{ 
      //this gets our chuck of current text for the element we’re on 
      elementText = this.getText(element.getStartOffset(),                   element.getEndOffset() - element.getStartOffset()); 
    } 
    catch(Exception ex){ 
      //whoops! 
      System.out.println("no text"); 
    } 
    int strLen = elementText.length(); 
    if (strLen == 0) {return;} 
    int i = 0; 

    if (element.getStartOffset() > 0){ 
      //translates backward if neccessary 
      offs = offs - element.getStartOffset(); 
    } 
    if ((offs >= 0) && (offs <= strLen-1)){ 
      i = offs; 
      while (i >0){ 
      //the while loop walks back until we hit a delimiter 
        i--; 
        char charAt = elementText.charAt(i); 
        if ((charAt == ' ') | (i == 0) | (charAt =='(') | (charAt ==')') | 
            (charAt == '{') | (charAt == '}')){ //if i == 0 then we're at the begininng 
          if(i != 0){ 
            i++; 
          } 
          word = elementText.substring(i, offs);//skip the period 

          String s = word.trim().toLowerCase(); 
          //this is what actually checks for a matching keyword 
          if (keywords.contains(s)){ 
            try{ 
              //remove the old word and formatting 
              this.remove(currentPos - word.length(), word.length()); 
              /*replace it with the same word, but new formatting 
              *we MUST call the super class insertString method here, otherwise we 
              *would end up in an infinite loop !!!!!*/ 
              super.insertString(currentPos - word.length(), word, bold); 
            } 
            catch (Exception ex){ 
              ex.printStackTrace(); 
            } 
          } 
          break; 
        } 
      } 
    } 
  } 

  public void insertString(int offs, 
                          String str, 
                          AttributeSet a) throws BadLocationException{ 
    if (offs < 0){ 
      return; 
    } 
    currentPos = offs; 
    char strChar; 
    super.insertString(offs, str, normal); 

    int strLen = str.length(); 
    if (strLen > 1){ 

    } 
    else{ 
      strChar = str.charAt(0); 

      switch (strChar){ 
        case ('{'):case ('}'):case (' '): case('\n'): 
        case ('('):case (')'):case (';'):case ('.'):{ 
          checkForKeyword(); 
          wordStart = offs; 
        } 
        break; 
      }//end switch 
    } 
  } 

  public Vector getKeywords(){ 
    return this.keywords; 
  } 

  public void setKeywords(Vector aKeywordList){ 
    if (aKeywordList != null){ 
      this.keywords = aKeywordList; 
    } 
  } 
} 

  

 

All Rights Reserved
Copyright ©  2004 SYS-CON Media, Inc.
  E-mail: [email protected]

Java and Java-based marks are trademarks or registered trademarks of Sun Microsystems, Inc. in the United States and other countries. SYS-CON Publications, Inc. is independent of Sun Microsystems, Inc.