JTextPane Java关键字变色

JTextPane 关键字变色 SWT JTextPane 可以把控件中需要的字符串的颜色修改成自己想要的颜色 立即下载

import java.util.StringTokenizer;

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;
import javax.swing.text.*;
import javax.swing.event.*;
import javax.swing.text.rtf.RTFEditorKit;

public class MyTextPane extends JTextPane {

    protected StyleContext m_context;
    protected DefaultStyledDocument m_doc;
    private   MutableAttributeSet keyAttr,normalAttr;
    private   MutableAttributeSet inputAttributes =
                new RTFEditorKit().getInputAttributes();

 private String[] keyWord={"int","float"};

    public MyTextPane() {
        super();
        m_context = new StyleContext();
        m_doc = new DefaultStyledDocument(m_context);
        this.setDocument(m_doc);

        this.addKeyListener(new KeyAdapter() {
            public void keyReleased(KeyEvent ke) {
                syntaxParse();
            }
        });

//定义关键字显示属性
        keyAttr = new SimpleAttributeSet();
        StyleConstants.setForeground(keyAttr, Color.green);

//定义一般文本显示属性
        normalAttr = new SimpleAttributeSet();
        StyleConstants.setForeground(normalAttr, Color.blue);
    }

    public void syntaxParse() {
        try {
            String s = null;
            Element root = m_doc.getDefaultRootElement();

            int cursorPos = this.getCaretPosition();   
            int line = root.getElementIndex(cursorPos);

            Element para = root.getElement(line);
            int start = para.getStartOffset();
            int end = para.getEndOffset() - 1;
            s = m_doc.getText(start, end - start);

            int i = 0;
            int xStart = 0;

//分析关键字---
            m_doc.setCharacterAttributes(start, s.length(),normalAttr, false);
            MyStringTokenizer st = new MyStringTokenizer(s);
            while( st.hasMoreTokens()) {
                s = st.nextToken();
                if ( s == null) return;
                for (i = 0; i < keyWord.length; i++ ) {
                    if (s.equals(keyWord[i])) break;
                }
                if ( i >= keyWord.length ) continue;

                xStart = st.getCurrPosition();

                //设置关键字显示属性
                m_doc.setCharacterAttributes(start+xStart, s.length(),
                                             keyAttr, false);
            }
            inputAttributes.addAttributes(normalAttr);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame("test text pane");
        frame.getContentPane().add(new MyTextPane());
        WindowListener wndCloser = new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        };
        frame.addWindowListener(wndCloser);
        final int inset = 50;
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        frame.setBounds ( inset, inset, screenSize.width - inset*2, screenSize.height - inset*2 );
        frame.show();
    }
}

/*在分析字符串的同时,记录每个token所在的位置
*
*/
class MyStringTokenizer extends StringTokenizer{
    String sval = " ";
    String oldStr,str;
    int m_currPosition = 0,m_beginPosition=0;
    MyStringTokenizer(String str) {
        super(str," ");
        this.oldStr = str;
        this.str = str;
    }

    public String nextToken() {
       try {
           String s = super.nextToken();
           int pos = -1;

           if (oldStr.equals(s)) {
               return s;
           }

           pos = str.indexOf(s + sval);
           if ( pos == -1) {
               pos = str.indexOf(sval + s);
               if ( pos == -1)
                   return null;
               else pos += 1;
           }

           int xBegin = pos + s.length();
           str = str.substring(xBegin);

           m_currPosition = m_beginPosition + pos;
           m_beginPosition = m_beginPosition + xBegin;
           return s;
       } catch (java.util.NoSuchElementException ex) {
           ex.printStackTrace();
           return null;
       }
    }

   //返回token在字符串中的位置
   public int getCurrPosition() {
       return m_currPosition;
   }
}

 

CH340驱动安装全攻略:从Windows到MacOS的避坑指南(2025最新版) 本文提供2025年最新版CH340驱动安装全攻略,涵盖Windows、MacOS和Linux三大操作系统。详细解析了驱动安装的核心原理、标准流程,并针对Windows设备管理器报错、MacOS系统安全限制等常见“坑点”提供了深度排错与解决方案,旨在帮助开发者快速稳定地完成USB转串口通信配置。 阅读详情

相关推荐

【Telephony】APN配置及加载流程&项目实践(AOSP)

学习APN关键是学会明白apns-conf.xml文件各个参数的意思,然后熟悉TelephonyProvider是如何读取文件创建数据库的,譬如数据库表的约束、文件的读写顺序等,还有读取后的ApnSetting的二次定制以及显示(例如屏蔽xcap等)。虽然一般在项目中APN的需求很简单,就是按照客户提供的APN参数添加上配置,或者在显示屏蔽一些参数,但是项目维护的过程中APN的问题也是比较多的。

weixin_44513784的博客 5516

java jtextpane底色,如何在JTextPane中的一行上设置自定义背景色

I would like to alternate between gray and white as background from one line of my JTextPane to the next.I tried to do this by overloading the paintComponent() method and drawing the background manual...

weixin_34409887的博客 334

联想拯救者恢复出厂设置全攻略

通过本文介绍的几种方法,你可以轻松地将联想拯救者恢复到出厂系统状态。无论是通过Windows恢复选项、高级启动选项还是一键恢复功能,都能帮助你解决系统问题、清除个人信息或重置软件环境。在重置前,请务必备份重要数据,并确保了解重置的影响。重置完成后,进行适当的系统设置和软件安装,让你的联想拯救者焕然一新,继续为你提供高效、稳定的计算体验。

mmoo_python的博客 3254

扩展JTextPane,使其有关键字自动加亮功能。

import java.util.StringTokenizer;import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.text.*;import javax.swing.event.*;import javax.swing.text.rtf.RTFEditorKit;publ

jimw的专栏 1190

解决Word中英文混排的5个常见排版问题(含单词换行、间距调整等)

本文详细解析Word中英文混排的5大常见排版问题,包括单词换行、间距调整、标点混用等,提供专业解决方案。通过设置段落格式、调整兼容性选项和使用字体组合等技巧,帮助用户轻松解决文档排版难题,提升专业性和阅读体验。

vim8coder的博客 1345

SUMO仿真教程(5) —— 使用“XML“语言自定义构建路网

文章目录一.简要介绍1.node file2.edge file3.lane definitions(1)路段细分(2)邻近的对向车道(3)删除边或车道4.type file(1)简要概述(2)edge定义中引用type文件的示例(3)指定车辆种类的速度限制5.connections file(1)简要概述:(2)connection的属性参数(3)删除连接(4)设置连接的优先级(5)同一边的多个连接二.演示示例:1.自定义编写node file2.自定义编写edge file3.自定义编写type fil

weixin_50632459的博客 5018

设置JTextPane指定内容的颜色

package Assis; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.text.*; public class SetTextColor { public static void main(String[] args) { final JFr...

(Never Give Up)--(我的知识点滴) 1261

【WLAN】【调试】如何使用Wireshark分析加密的WiFi数据包

- 当配置网卡为monitor 模式的情况下,可以使用 wireshark来抓取空口报文; - 如果WiFi采用非Open加密方式,则从报文中仅能分析到 802.11协议层,更底层(如DHCP、ICMP、TCP等)被加密,此时可以使用 wireshark 来完成解密。 - 解密之后,可以通过icmp、tcp等关键词过滤报文。

一介草民,只为生活。 2988

使用JTextPane代替JTextArea实现每一行的字的颜色不一样

import java.awt.BorderLayout; import java.awt.Color; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTextPane; import javax.swing.text.BadLocationException; impo

ycb1689的专栏 8540

YOLOv8 交通流量监测详解

本文介绍了一个基于YOLOv8的交通流量监测系统,该系统通过深度学习技术实现车辆实时检测、跟踪和分类。系统核心功能包括:1)使用YOLOv8模型检测道路车辆并进行持续跟踪;2)按方向和车型统计车流量;3)支持多区域流量监测和数据可视化。文章提供了完整的代码实现示例,涵盖基础车辆检测、视频流处理和高级数据分析功能。系统还可进一步优化性能,如使用轻量级模型、GPU加速等,并建议扩展车速估算、密度分析等功能。该方案为交通管理提供了有效的实时监测和决策支持工具。

u010117029的博客 347

倍福---EL2262模块飞拍配置

控制器安装了twincat3,用EL2262实现相机飞拍功能。本文档只介绍如何通过EL2262实现飞拍的触发,并不涉及视觉方面的处理 参考文章: https://author.baidu.com/home?from=bjh_article&app_id=1669190598708386 https://mp.weixin.qq.com/s/r4Iq8kOP-o4_M8vCce5M9g 1、 飞拍的应用 在大多数场合,只能当被检测工件和相机都处于静止状态下才能进行拍照,拍照完成后,再移动工件或相机,进

weixin_41883890的博客 3743

JEditorPane实现关键字代码高亮效果

首先感谢博客:https://blog.youkuaiyun.com/jsrookie/article/details/84021831 的引导。 要实现高亮效果,我们需要把JEditorPane默认的编辑工具类覆盖掉。我们自己实现自己的编辑工具类。 在swing中,已经有一些工具类的子类,我们直接继承该子类就行了,我们继承StyledEditorKit类。 如下: public class JavaCode...

喜欢原味奶茶的博客 987

ethernet eth0: Could not attach to PHY

整个流程看下来就是MAC connect PHY的过程失败了,失败的具体原因根据config_init,上图(bcm54xx_config_init) ,从此方向入手去定位原因;我这里的问题是has_gmac4没有置1,根据 has_gmac4: uses GMAC4 core.按照上面的调用逻辑,添加了部分打印,定位到__phy_read接口返回失败。stmmac_mdio_read 大部分都是linux的标准接口。最终取决于平台用的是哪家的phy,调用config_init。

无线互联&网络介绍 2704

如何给JTextPane的内容进行特殊关键字修饰(如用不同的颜色表示)

相信不少人写过关于文本编辑器的程序,或者正在写各类程序。也许你正在为其中的某些问题而烦恼,如怎样对关键字进行修饰就曾经烦扰了我很久,现在已经解决了这个问题,下面就把我解决的方法给大家分享一下吧: 首先要说明的是要对关键字进行修饰必须用JTextPane类 //第一个类:数据类:WrodNode.java package eu.jxau.presubmit; /** * 装有单词和单词所在...

专注于此刻 485

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

JTextArea如何改变单行字体颜色

JTextArea本身不具备这样的功能,它是纯文本组件,你可以使用JTextPane,通过操作Document文档来控制JTextPane显示的内容,下面的代码在一个JTextPane中显示了一个图标,三行文字,每行用不同的颜色和大小显示:   import javax.swing.*; import java.awt.*; import java....

germmy-神一样的开发 1695

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

用java swing 中的jTextPane实现局部文本改色添加删除线等操作

用java swing 中的jTextPane实现局部文本改色添加删除线等操作,以下是执行图片:     实现代码如下:     /*  * To change this template, choose Tools | Templates  * and open the template in the editor.  */ /*  * NewJFrame....

ljl_xyf的专栏 728

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Java高亮关键字

写自己的文本编辑器(一): 高亮关键字一. 高亮的内容:需要高亮的内容有:1. 关键字, 如 public, int, true 等. 2. 运算符, 如 +, -, *, /等3. 数字4. 高亮字符串, 如 "example of string"5. 高亮单行注释6. 高亮多行注释二. 实现高亮的核心方法:StyledDocument.setCharacterAttributes(int of

lmlover的专栏 5233

java swing 文本域中改变字体颜色

我们常用的JTextArea是纯文本组件,不能改变字体的颜色,可以用JTextPane组件,它要比JTextArea功能强大很多,JTextPane的用法可以看java文档:点击打开链接 1.用JTextPane的setForeground设置字体颜色。 package java; import java.awt.Color; import javax.swing.JFrame; import

ssd_dai的博客 2万+

Swing 对JTextPane中字体颜色的设置

import java.awt.BorderLayout; import java.awt.Color; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JEditorPane; import...

xbgordon的专栏 950

java模拟聊天窗口

package windows.beautify;import java.awt.BorderLayout;import java.awt.Color;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.File;import javax.sw

3093

Swing实现Java代码编辑器实现关键词高亮显示

本文主要记录怎么给代码编辑器实际语法高亮显示的功能,先来张效果图吧:          当JEditorPane被创建时,它会把createDefaultEditorKit()方法(javax.swing.text.EditorKit的子类对象)的返回值作为默认的编辑器工具包,然后将文本的编辑与显示工作交给这个工具包。其原型为:   protected EditorKi...

ljl_xyf的专栏 508

IDEA Java关键字高亮字体配色

使用IDEA的relax your eyes 配色方案 Java关键字变成了和eclipse一样的紫色 但是一旦点击关键字 高亮也是辣眼睛的紫色解决方法为:取消勾选

日高人渴漫思茶 2万+

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

下面是一个应用的例子源码:HTMLDocumentEditor import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Toolkit; import java.awt.event.ActionEvent;

ycb1689的专栏 6758

java编写的浏览器_Java编写简单的网页浏览器

时间:2019-01-25概述:网页浏览器 Web 浏览器用Java语言编写实现一个简单的WEB浏览器,我们经常要在Internet 上浏览网页,这就需要浏览器,目前使用比较广泛的是Internet Explorer,通过这些浏览器我们可以在Internet 上浏览各种信息。本例通过编程实现了一个简单的Web 浏览器,但是这个浏览器比较简单,不能在网上冲浪。运行程序,并加上URL 作为参数,就可...

weixin_39867212的博客 2502

## 自制java代码编辑器 关键字高亮,代码补全,排版自定义,系统硬盘操作

  # 标题 ***1.自定义排版*** ***需要 javadocking.jar包,*** ***代码的jar包资源*** ***   [https://download.youkuaiyun.com/download/qq_28382487/10761535] (https://download.youkuaiyun.com/download/qq_28382487/10761535)  *** p...

qq_28382487的博客 1371

Java文本框内文字显示不同颜色、字号等属性【函数调用一键实现】

Hello!你好哇,我是灰小猿! 最近在做聊天室相关项目的开发的时候,需要对文本框中的字体进行区别显示,但是由于JTextArea文本框属于纯文本形式的,无法对其中的文本进行不同格式的显示,所以这个时候就需要使用JTextPane文本域进行文本内容的显示了。 其主要原因是: JTextPane文本域中可以设置html样式 JTextArea文本框不可以设置html样式 这就造成了JTextPane文本域中的内容可以根据需要自行设置属性,从而实现不同文字内容的颜色、字号等属性。 通过以下函数可以直

累计发表博客60余万字,优快云 博客专家、Java 领域优质创作者、华为云享专家、阿里云专家博主。专注分享 Java 优质文章,毕设实战项目开发,全网粉丝10W+ 7427
上一篇: jdk中所有的类 http://javaresearch.gro.clinux.org/jdk140/allclasses.html
下一篇: jdk中所有的类
raphaelxia
博客等级 码龄22年 6粉丝 112原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值