CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

关键字高亮显示方法(2)!!

楼主Afritxia(能活不易)2003-02-02 10:47:17 在 Java / J2SE / 基础类 提问

//   以下仅供参考!!...  
   
  import   java.awt.*;  
  import   java.awt.event.*;  
  import   java.lang.StringBuffer;  
  import   javax.swing.*;  
  import   javax.swing.event.*;  
  import   javax.swing.text.*;  
   
  /**  
    *   <p>Title:   Editor</p>  
    *   <p>Description:   A   Style   Text   Editor</p>  
    *   <p>Copyright:   Copyright   (c)   Afritxia   2002</p>  
    *   <p>Company:   None</p>  
    *   @author   Afritxia  
    *   @version   1.0  
    */  
   
  class   MyEditorKit   extends   DefaultEditorKit  
  {  
          public   MyEditorKit(){  
                  super();  
          }  
   
          public   ViewFactory   getViewFactory(){  
                  return   new   MyViewFactory();  
        }  
  }  
   
  class   MyViewFactory   implements   ViewFactory  
  {  
          public   MyViewFactory(){  
          }  
   
          public   View   create(Element   element){  
                  return   new   MyEditorView(element);  
          }  
  }  
   
  class   MyEditorView   extends   PlainView  
  {  
          public   MyEditorView(Element   element){  
                  super(element);  
          }  
   
          protected   int   drawUnselectedText(Graphics   g,   int   x,   int   y,   int   p0,   int   p1)  
                  throws   BadLocationException{  
                  Document   doc=getDocument();  
                  Segment   segment=new   Segment(),   token=new   Segment();  
                  int   index=0,   count=p1-p0;  
   
                  doc.getText(p0,   count,   segment);  
                  for(int   i=0;   i<count;   i++){  
                          if(Character.isLetter(segment.array[segment.offset+i])){  
                                  index=i;  
                                  while(++i<count&&Character.isLetter(segment.array[segment.offset+i]));  
                                  doc.getText(p0+index,   (i--)-index,   token);  
                                  if(KeyWord.isKeyWord(token)){  
                                          g.setFont(KEYWORDFONT);  
                                          g.setColor(KEYWORDCOLOR);  
                                  }else{  
                                          g.setFont(TEXTFONT);  
                                          g.setColor(TEXTCOLOR);  
                                  }  
                                  x=Utilities.drawTabbedText(token,   x,   y,   g,   this,   p0+index);  
                                  continue;  
                          }else{  
                                  index=i;  
                                  while(++i<count&&!Character.isLetter(segment.array[segment.offset+i]));  
                                  doc.getText(p0+index,   (i--)-index,   token);  
                                  g.setFont(TEXTFONT);  
                                  g.setColor(TEXTCOLOR);  
                                  x=Utilities.drawTabbedText(token,   x,   y,   g,   this,   p0+index);  
                                  continue;  
                          }  
                  }  
                  return   0;  
          }  
   
          public   static   Font   TEXTFONT=new   Font("DialogInput",   Font.PLAIN,   11);  
          public   static   Color   TEXTCOLOR=Color.black;  
          public   static   Font   KEYWORDFONT=new   Font("Courier   New",   Font.BOLD,   11);  
          public   static   Color   KEYWORDCOLOR=Color.black;  
  }  
   
  class   KeyWord  
  {  
          public   KeyWord(){  
          }  
   
          public   static   boolean   isKeyWord(Segment   seg){  
                  boolean   isKey=false;  
                  for(int   i=0;   !isKey&&i<KEYWORDS.length;   i++)  
                        if(seg.count==KEYWORDS[i].length()){  
                                isKey=true;  
                                for(int   j=0;   isKey&&j<seg.count;   j++)  
                                        if(seg.array[seg.offset+j]!=KEYWORDS[i].charAt(j))  
                                                isKey=false;  
   
                        }  
                return   isKey;  
          }  
   
          public   static   final   String[]   KEYWORDS={  
                  "abstract",   "boolean",   "break",   "byte",   "case",   "catch",   "char",   "class",   "const",   "continue",  
                  "default",   "do",   "double",   "else",   "extends",   "final",   "finally",   "float",   "for",   "goto",  
                  "if",   "implements",   "import",   "instanceof",   "int",   "interface",   "long",   "native",   "new",   "package",  
                  "private",   "protected",   "public",   "return",   "short",   "static",   "strictfp",   "super",   "switch",   "synchronized",  
                  "this",   "throw",   "throws",   "transient",   "try",   "void",   "volatile",   "while",   "true",   "false"  
          };  
  }  
   
  public   class   Editor   extends   JFrame  
  {  
          Container   c;  
          JEditorPane   editor=new   JEditorPane();  
          MyEditorKit     kit=new   MyEditorKit();  
   
  public   Editor(){  
  super("Editor");  
  initFrame();  
  setSize(640,   480);  
  }  
   
  private   void   initFrame(){  
  c=getContentPane();  
  c.setLayout(new   BorderLayout());  
                  editor.setFont(new   Font("Courier   New",   Font.PLAIN,   11));  
                  editor.setEditorKitForContentType("text/java",   kit);  
                  editor.setContentType("text/java");  
   
                  editor.addCaretListener(new   CaretListener(){  
                          public   void   caretUpdate(CaretEvent   e){  
                          }  
                  });  
                  c.add(new   JScrollPane(editor),   BorderLayout.CENTER);  
  }  
   
  public   static   void   main(String[]   args){  
  Editor   App=new   Editor();  
  App.addWindowListener(new   WindowAdapter(){  
  public   void   windowClosing(WindowEvent   e){  
  System.exit(0);  
  }  
  });  
  App.show();  
  }  
  } 问题点数:0、回复次数:4Top

1 楼beyond_xiruo(CorruptionException)回复于 2003-02-02 17:55:07 得分 0

goodTop

2 楼Afritxia(能活不易)回复于 2003-02-03 10:13:30 得分 0

Afritxia特别感谢:  
   
          在这里我要特别感谢http://www.chinajavaworld.net网站上的iwys和frui两位朋友!如果不是这两位朋友把自己的代码贴出来共享,恐怕我的这个高亮显示还是遥遥无期.虽然当时未能亲身参与论坛,但还是受益非浅!  
   
          http://www.chinajavaworld.net/   |   论坛   |   Java   GUI程序设计   精华区   |   主题:在JTextPane中如何设置局部文本(例如关键字)的Color很急!!  
   
          我想我会在之后的<<About   My   Editor>>文章中刨析这个算法.  
   
          最后,再次感谢iwys和frui两位朋友!  
  Top

3 楼Afritxia(能活不易)回复于 2003-02-03 11:34:38 得分 0

勘误:  
   
  protected   int   drawUnselectedText(Graphics   g,   int   x,   int   y,   int   p0,   int   p1)  
                  throws   BadLocationException{  
  //   最后的一句return改成:  
  return   x;  
  }Top

4 楼ZeroC(笨小孩)回复于 2003-02-03 14:56:46 得分 0

markTop

相关问题

  • 如何高亮显示关键字?
  • 如何在查询结果中高亮显示关键字?
  • 如何高亮度显示pascal的关键字和保留字???
  • 搜索完后,让搜索后的关键字高亮显示
  • 在客户端用javascript对内容中的特定关键字加亮(高亮)显示的实现方法或思路
  • 在客户端用javascript对内容中的特定关键字加亮(高亮)显示的实现方法或思路
  • 如何用javascript高亮显示代码?方法我知道就是replace替换,我想求一个关于java,vb,html中的关键字完整的定义!
  • ★☆★☆ 再问一个问题: 怎样高亮显示VC中的关键字?
  • 如何让搜索关键字在搜索结果中高亮显示???
  • 重大问题!用关键字搜索,如何将搜索结果中的关键字高亮显示出来?(像google那样?)

关键词

  • swing
  • myviewfactory
  • myeditorview
  • segment
  • element
  • javax
  • import

得分解答快速导航

  • 帖主:Afritxia

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo