`
colorlife
  • 浏览: 132322 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

JTextPane中词汇的高亮显示

阅读更多

转自:http://chenghy28.iteye.com/blog/547489

 

Java代码 
  1. //一个可作为JTextPane的document的代码  
Java代码 
  1. import javax.swing.text.AttributeSet;  
  2. import javax.swing.text.BadLocationException;  
  3. import javax.swing.text.DefaultStyledDocument;  
  4. import javax.swing.text.MutableAttributeSet;  
  5. import javax.swing.text.StyleConstants;  
  6.   
  7. /** 
  8.  *@author gao 
  9.  
  10.  */  
  11. public class CustomizeStyledDocument extends DefaultStyledDocument {  
  12.  private int type = -1;// 数据连接类型  
  13.   
  14.  AttributeSet myAttributeSet = null;  
  15.   
  16.  public CustomizeStyledDocument(int type) {  
  17.   this.type = type;  
  18.  }  
  19.   
  20.  /** 
  21.   *插入字符串 
  22.   */  
  23.  public void insertString(int offset, String str, AttributeSet a)  
  24.    throws BadLocationException {  
  25.   this.myAttributeSet = a;  
  26.   super.insertString(offset, str, a);  
  27.   setSyntaxColor(offset, str.length());  
  28.  }  
  29.   
  30.  /** 
  31.   *删除字符串 
  32.   */  
  33.  public void remove(int offs, int len) throws BadLocationException {  
  34.   super.remove(offs, len);  
  35.   setSyntaxColor(offs);  
  36.  }  
  37.   
  38.  /** 
  39.   *获取制定位置的字符 
  40.   */  
  41.  private String getPositionChar(int offset) {  
  42.   String str = "";  
  43.   try {  
  44.    str = getText(offset, 1);  
  45.   } catch (BadLocationException ex) {  
  46.    // ex.printStackTrace(System.out);  
  47.   }  
  48.   return str;  
  49.  }  
  50.   
  51.  /** 
  52.   *从指定的位置开始,倒推到第一个遇到空格位置 
  53.   */  
  54.  private String getBeforeBlankString(int offset) {  
  55.   String str = "";  
  56.   if (offset < 0)  
  57.    return "";  
  58.   
  59.   str = getPositionChar(offset);  
  60.   if (SyntaxMgr.isSpaceChar(str))  
  61.    return "";  
  62.   
  63.   String r = getBeforeBlankString(offset - 1);  
  64.   return r + str;  
  65.  }  
  66.   
  67.  /** 
  68.   *从指定的位置开始,顺推到第一个遇到空格位置 
  69.   */  
  70.  private String getAfterBlankString(int offset) {  
  71.   String str = "";  
  72.   if (offset > getLength())  
  73.    return "";  
  74.   str = getPositionChar(offset);  
  75.   if (SyntaxMgr.isSpaceChar(str))  
  76.    return "";  
  77.   String r = getAfterBlankString(offset + 1);  
  78.   return str + r;  
  79.  }  
  80.   
  81.  /** 
  82.   *根据Postion,向前判断,向后判断,设置颜色,返回设置颜色末尾的位置 
  83.   */  
  84.  private int setSyntaxColor(int offset) {  
  85.   if (offset < 0)  
  86.    return offset;// 如果设置的位置不存在,可以不用考虑  
  87.   
  88.   if (myAttributeSet == null)  
  89.    return offset;// 如果myAttributeSet为null,可以不用考虑  
  90.   
  91.   String ifSyntax = "";  
  92.   
  93.   String before = getBeforeBlankString(offset - 1);  
  94.   String after = getAfterBlankString(offset);  
  95.   
  96.   ifSyntax = (before + after).trim();  
  97.   // System.out.println(ifSyntax);  
  98.   int start = offset - before.length();  
  99.   
  100.   int tmp_len = ifSyntax.length();  
  101.   
  102.   if (start < 0 || tmp_len <= 0)  
  103.    return offset;// 如果设置颜色的字符串为空,返回  
  104.   
  105.   // 设置颜色  
  106.   StyleConstants.setForeground((MutableAttributeSet) myAttributeSet,  
  107.     SyntaxMgr.isSyntax(type, ifSyntax));  
  108.   
  109.   setCharacterAttributes(start, tmp_len, myAttributeSet, true);  
  110.   
  111.   return start + tmp_len;  
  112.  }  
  113.   
  114.  /** 
  115.   *根据一个范围,设置该范围内的的SyntaxColor 
  116.   */  
  117.  private int setSyntaxColor(int offset, int len) throws
分享到:
评论

相关推荐

    关于JTextPane中进行搜索结果显示的问题及解决

    在Java Swing库中,`JTextPane`是一个用于显示和编辑富文本的组件,它可以处理包含格式化文本、图片和嵌入对象的文档。在处理大量文本时,我们经常需要实现搜索功能,以便用户能够快速查找特定的关键词或短语。然而...

    Swing实现编辑器(支持语法高亮)

    在Swing中实现语法高亮,通常涉及到以下步骤: 1. **选择合适的文本模型**:JTextPane使用 StyledDocument 模型,它可以对文本的不同部分应用不同的样式,如字体、颜色和背景色,这对于语法高亮至关重要。 2. **...

    JAVA-----JTextPane实例

    然而,为了使`JTextPane`能够在图形用户界面中显示出来,我们需要将其添加到一个容器中,如`JFrame`或`JPanel`。下面是一个简单的示例,展示了如何在`JFrame`中初始化和显示`JTextPane`: ```java import java.awt....

    控制jEditorPane和jTextPane换行的演示程序

    在Java Swing库中,`JEditorPane`和`JTextPane`是两个常用的文本组件,它们主要用于显示和编辑富文本内容。在这个特定的程序中,我们看到的是一个演示如何控制这两类组件换行特性的应用。`JEditorPane`通常用于显示...

    JTextPane 关键字变色

    在给定的标题“JTextPane 关键字变色”和描述“SWT JTextPane 可以把控件中需要的字符串的颜色修改成自己想要的颜色”中,我们关注的主要知识点是`JTextPane`如何实现特定关键字的高亮显示,也就是改变颜色。...

    JTextPane使用

    JTextPane使用,可以传图片,文字等

    JTextPane--insert-Image.zip_JTextPane

    1. **创建`JTextPane`实例**:首先,你需要创建一个`JTextPane`对象,将其添加到容器(如`JFrame`)中,以便在窗口中显示。 ```java JTextPane textPane = new JTextPane(); JFrame frame = new JFrame("JTextPane...

    ChatApp_Java.zip

    课程设计期间做的Java的桌面端小程序,可以发送Emoji表情的聊天室,另外在文件夹中放置了自己的关键代码部分解析,关于emoji部分可查看笔者博客...

    JTable编辑器、渲染器及JTextPane着色、搜索实例——待办事项、日历及JSON格式化工具

    NULL 博文链接:https://icarusliu.iteye.com/blog/2098986

    JEditorPane/JTextPane常见操作(字体,颜色,字号,加粗,斜线,下划线,保存,行间距 等操作)以及HTML空格处理

    在Java的Swing库中,`JEditorPane`和`JTextPane`是两种非常重要的文本组件,它们允许用户编辑和显示富文本内容,包括不同的字体、颜色、字号、样式等。这两个组件都是`javax.swing.text`包的一部分,提供了丰富的...

    java记事本

    开发者可能会使用`JTextPane`或`JEditorPane`组件来实现代码编辑功能,并结合正则表达式来匹配并高亮显示Java关键字。 另外,Java记事本中的高亮显示可能涉及到颜色样式和字体设置。在Java中,可以通过设置`...

    JAVA文本域显示不同字体颜色的文字

    在JTextPane中,我们可以创建和应用Style对象来定义文本的样式,如字体、颜色、下划线等。Style对象由StyleContext管理,StyleContext是一个全局的样式存储库。 4. ** 设置颜色和字体**: 通过调用`setAttributes...

    仿windows记事本

    这涉及到处理图像数据,将其转换为适合在文本中显示的格式,并且在保存文档时能够正确地保存和恢复图片的位置和数据。 5. **文件处理**:项目可能包含了对文件I/O的操作,如读取和写入文本文件。在Java中,这通常...

    java文本编辑器

    文本编辑器的一个重要特性就是能够高亮显示代码中的关键字,这有助于提高代码可读性和编写效率。在Java中,可以利用`StyledDocument`类结合`CharacterAttributeSet`来实现这一功能。例如: ```java StyledDocument ...

    虚拟的java编辑器课程设计报告样本.doc

    这个任务旨在让学生理解如何利用Java语言构建一个具备基本文本编辑功能的图形用户界面(GUI),同时引入语法高亮显示,以增强代码的可读性。 一、需求分析 1. 打开已有文件:编辑器应能加载和显示已有的Java源代码...

    editedit

    6. **插入多媒体**: 如何通过HTML插入图片或嵌入视频,以及如何在JTextPane中实现这些功能。 7. **编程实践**: 创建和运行Java Swing应用的基本步骤,包括导入库、定义组件、布局管理、事件处理等。 总的来说,...

Global site tag (gtag.js) - Google Analytics