当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:14:00  来源:本站整理

<b>若何更好的操纵JTextPane</b>[Java编程]

赞助商链接



  本文“<b>若何更好的操纵JTextPane</b>[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

我常常在网上瞥见很多朋友问,如安在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.


  以上是“<b>若何更好的操纵JTextPane</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .