如何更好的使用JTextPane

我经常在网上看见许多朋友问,如何在JTextArea中控制字符,如何设置特定字符的颜色等等。我在用Java做一个SQL查询分析器中发现了一个比较好的解决方案就是使用JTextPane,那么如何更好的使用JTextPane呢,我现摘自我那部分程序的一部分,供大家参考。

package com.JDAGUI;
import javax.swing.text.*;
import java.util.*;
import java.awt.*;
import com.JDA.*;
/**
*@author whxu
*/
public class JDAStyledDocument extends DefaultStyledDocument
{
  private int type = -1;//数据连接类型
  AttributeSet myAttributeSet = null;
  public JDAStyledDocument(int type)
  {
   this.type = type;
  }
  /**
  *插入字符串
  */
  public void insertString(int offset,String str,AttributeSet a)
  throws BadLocationException
  {
   this.myAttributeSet = a;
   super.insertString(offset,str,a);
   setSyntaxColor(offset,str.length());
  }
/**
  *删除字符串
  */
  public void remove(int offs,int len)
  throws BadLocationException
  {
   super.remove(offs,len);
   setSyntaxColor(offs);
  }
  /**
  *获取制定位置的字符
  */
  private String getPositionChar(int offset)
  {
   String str = "";
   try
   {
    str = getText(offset,1);
   }
   catch(BadLocationException ex)
   {
    //ex.printStackTrace(System.out);
   }
   return str;
  }
/**
  *从指定的位置开始,倒推到第一个遇到空格位置
  */
  private String getBeforeBlankString(int offset)
  {
   String str = "";
   if(offset<0) return "";
 
   str = getPositionChar(offset);
   if(SyntaxMgr.isSpaceChar(str))
    return "";
   String r = getBeforeBlankString(offset-1);
   return r + str;
  }
  /**
   *从指定的位置开始,顺推到第一个遇到空格位置
  */
  private String getAfterBlankString(int offset)
  {
   String str = "";
   if(offset>getLength()) return "";
    str = getPositionChar(offset);
    if(SyntaxMgr.isSpaceChar(str))
     return "";
    String r = getAfterBlankString(offset+1);
    return str + r;
  }
  /**
   * 根据Postion,向前判断,向后判断,设置颜色,返回设置颜色末尾的位置
  */
  private int setSyntaxColor(int offset)
  {
   if(offset<0) return offset;//如果设置的位置不存在,可以不用考虑
   if(myAttributeSet==null) return offset;//如果myAttributeSet为null,可以不用考虑
   String ifSyntax = "";
   String before = getBeforeBlankString(offset-1);
   String after = getAfterBlankString(offset);
   Syntax = (before + after).trim();
   int start = offset-before.length();
   int tmp_len = ifSyntax.length();
   if(start<0 || tmp_len<=0) return offset;//如果设置颜色的字符串为空,返回
   //设置颜色
  StyleConstants.setForeground((MutableAttributeSet)myAttributeSet,
   SyntaxMgr.isSyntax(type,ifSyntax));
  setCharacterAttributes(start,tmp_len,myAttributeSet,true);
   return start + tmp_len;
  }
  /**
   *根据一个范围,设置该范围内的的SyntaxColor
  */
  private int setSyntaxColor(int offset,int len)
   throws BadLocationException
   {
    //如果范围不存在,不考虑
    if(offset<0 || len<0) return offset;
    int tmp_offset = offset;
    while(tmp_offset<offset + len)
    {
     tmp_offset = setSyntaxColor(tmp_offset);
     tmp_offset = getNextWordOffset(tmp_offset);
    }
    tmp_offset = setSyntaxColor(tmp_offset);//设置循环完后的最后一个单词
    return tmp_offset;
   }
   /**
    *根据Postion,获得下一个单词的开始点
   */
   private int getNextWordOffset(int offset)
   {
    int rOffset = offset;
    int textlength = getLength();
    while(rOffset<=textlength && offset>=0)
    {
     String str = getPositionChar(rOffset);
     if(!SyntaxMgr.isSpaceChar(str))
     {
      break;
     }
     rOffset+=1;
    }
   if(rOffset!=offset)//设置间隔的颜色
   {
    //设置颜色
   StyleConstants.setForeground((MutableAttributeSet)myAttributeSet,
    SyntaxColorMgr.getSpaceColor());
   setCharacterAttributes(offset,rOffset-offset,myAttributeSet,true);
   }
   return rOffset;
  }
}

到此为此,我们做好了一个适用于JTextPane的Document。使用JTextPane就比较简单了。

可以这样使用

JTextPane sqlPane = new JTextPane(new JDAStyledDocument(type));

因为我这个例子中使用了根据数据库类型不同来显示不同的关键字,所以我传了一个int type。

时间: 2024-09-17 03:51:54

如何更好的使用JTextPane的相关文章

无线网络如何设置才能更安全

我们在使用无线网络上网时,一定要给你的无线网络加密,这样可以防止左邻右舍占用你的宽带.拖慢你的网速. 如果你觉得不用太麻烦,而对家中的无线网络不设限的话,那你就大错特错了.这样很容易被左邻右舍占用你的带宽,拖慢你的网速,因此为无线网络加密是最基本的自我保护.面对众多的设置选项,用户该如何下手呢?来看看T库小编给你们的建议吧.   无线网络勿用WEP加密方式 目前无线路由器提供的加密方式主要有WEP.WPA/WPA2.WPA-PSK/WPA2-PSK这几种,其中WEP是早期的加密方法,很容易被破解

图片原理与优化 如何在网站设计中发挥更好的效果

中介交易 SEO诊断 淘宝客 云主机 技术大厅 前言:该文收集了前辈们的一些关于图片优化的技巧,在此收拢到一起,对于各个方法的优化原理做了一些研究,希望能给大家对于图片优化这一块起到抛砖引玉的作用. 提到图片,我们不得不从位图开始说起,位图图像(bitmap),也称为点阵图像或绘制图像,是由称作像素(图片元素)的单个点组成的.这些点可以进行不同的排列和染色以构成一副图片.当放大位图时,可以看见赖以构成整个图像的无数单个方块. 常见的格式中JPG.PNG.GIF亦属于位图,所以它们的数据结构大致相

c语言基础-对于c语言该如何更好的学习。

问题描述 对于c语言该如何更好的学习. 我是个初学者,想问一下c语言在编程时有什么方法和技巧吗?编程时所用的冒泡法,递归,分别是什么意思 解决方案 C语言并不适合初学者,因为它比较原始和简陋,需要对计算机底层的细节有所了解,实现相同的功能,往往需要比别的语言多很多倍的代码量,而且语法检查不严格,初学者很难驾驭. 很多人学C语言并不是抱着学习本身为目的的,相反,不过是应付一个课程或者等级考试.但是这两者完全不同.所以在回答你的问题以前,先得搞清楚你属于什么情况. 解决方案二: 别急 慢慢来 以后都

AI 是中性的技术,如何用它更好地为人类服务

在本次大会上,澳大利亚新南威尔士大学教授.AAAI 执行委员会成员 Toby Walsh 发表了主题为<人工智能如何造福人类>的演讲. 在 Toby Walsh 看来,虽然埃隆马斯克.霍金等大佬对人工智能心存怀疑,但这并不影响人工智能造福人类.Toby Walsh用"食物银行"和"器官银行"两个案例证明,人工智能在解决贫穷.医疗等问题时,大有可为. 本文以下是根据Toby Walsh主题的演讲全文演讲整理,AI科技大本营略做修改略有删减: 谢谢各位,今天

用更少的钱看更清晰的视频——详谈阿里云窄带高清

窄带高清代表的是一种成本与体验相调和的视频服务理念.体验方面,观众在观看视频时会受到片源清晰度.分辨率.码率.帧率.编码算法.播放策略等影响,所谓的窄带高清也是希望从这些角度提高观众观看体验:影响成本的因素包括码率.分发策略和播放策略,窄带高清也是从这三个层面降低成本. 目前的视频体验     目前,中国视频用户体验是有待改善,如上图案例所示,视频中经常出现转码失真.拍摄噪声.卡顿.低帧率卡顿.低分辨率模糊.镜头抖动等现象,直接影响用户的视频观看体验.   在视频服务中,带宽的成本是必须要考虑的

设置小技巧让Excel 2007用得更顺手

Excel2007用起来还不是很顺手,感觉还是用以前的版本习惯,笔者今天教你设置一下,适应以前的操作习惯. 招式一:把"快速访问工具栏"请下来. 设置方法如下:点击Office按钮 在下拉菜单右下方点击"Excel选项"出现Excel选项界面如(图一)所示: 图一 点击左面"自定义"栏,在右面会出现"自定义快速访问工具栏"设置界面如(图二)所示: 图二 在这里你可以添加你日常工作中常用的命令.添加完以后勾选下面的"在

360安全浏览器-更快的网页下载速度

  360安全浏览器在浏览的各个方面进行优化以提高浏览速度,它比IE等同类浏览器具有更快的下载速度,这需要您自己的使用体验. 从技术上讲,大致有如下几个重要的环节进行了浏览优化: 1.扁平的模块封装,减少代码环节,节省CPU占用 2.特别为浏览器优化的OLE容器,减少不必要的接口和处理过程,节省CPU占用 3.独特的ActiveX控件自动安装过滤,停止浏览器自动下载控件的过程,节省网络带宽 4.增强的页面元素黑名单过滤,不同于标准接口的一般实现方法,在增强速度的同时,不影响界面美观,过滤掉的元素

5元素让页面文字阅读更舒适

  上网在线阅读,是大多人获取信息的重要途径.用户会在网上阅读到大量的新闻及各类文章,特别是网络小说,这些页面展示的主体就是通篇大段的文字.对于这种看似简单的文字堆砌的页面,有没有人抱怨过:"这样的页面还需要出效果图啊?"作为网页设计师的你是怎样处理这样的界面的? 是习惯性的使用宋体字或者微软雅黑? 是直接设为12px或者14px的字号? 你有想过为什么要使用这种字体.字号吗?你有考虑过文字排布与阅读效率的关系吗? 你的页面背景会影响到用户的浏览舒适度吗? 让我们从以下5个元素具体分析

CDN加速:让内容离用户更近

在互联网+时代,人民越来越依赖互联网获取信息,生活服务,娱乐等.流畅的用户访问体验是所有互联网产品获得用户认可和长期发展的基本前提.但如今网页中包含的元素也越来越丰富,有大量的图片.Flash.动画等内容,文件下载的数据量也在飞速上升,加上网络游戏,网络视频,直播等需要高带宽的业务蓬勃发展,对服务器和网络带宽的压力越来越大.21世纪是讲究效率的时代,唯快不破,互联网领域还存在着一个八秒定律,指用户访问一个网站时, 如果等待网页打开的时间超过8秒,会有超过70%的用户放弃等待.网站访问速度的快慢给