`
ljl_xyf
  • 浏览: 638342 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

    博客分类:
  • java
阅读更多

用java swing 中的jTextPane实现局部文本改色添加删除线等操作,以下是执行图片:

 


 

实现代码如下:

 

 

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * NewJFrame.java
 *
 * Created on 2011-2-21, 9:04:46
 */

package desktopapplicationmenu;

import java.awt.Color;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;

/**
 *
 * @author
 */

public class NewJFrame extends javax.swing.JFrame {

    /** Creates new form NewJFrame */
    public NewJFrame() {
        initComponents();
        jTextPane1.setText("http://www.my400800.cn ");
        // jEditorPane1.("<html>   <head>   <style type=´text/css´>     A{text-decoration: none; color: #000000; }     A:hover {text-decoration: underline; color: #FF0000; }   </style> </head> <body>     <a href=\"www.google.com\">Google</a><br>     <a href=\"www.yahoo.com\">Yahoo!</a> </body> </html>  ");
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">

    private void initComponents() {

        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        jScrollPane2 = new javax.swing.JScrollPane();
        jTextPane1 = new javax.swing.JTextPane();
        jButton3 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setName("Form"); // NOI18N

        org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(desktopapplicationmenu.DesktopApplicationMenu.class).getContext().getResourceMap(NewJFrame.class);
        jButton1.setLabel(resourceMap.getString("jButton1.label")); // NOI18N
        jButton1.setName("jButton1"); // NOI18N
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jButton2.setText(resourceMap.getString("jButton2.text")); // NOI18N
        jButton2.setName("jButton2"); // NOI18N
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });

        jScrollPane2.setName("jScrollPane2"); // NOI18N

        jTextPane1.setText(resourceMap.getString("jTextPane1.text")); // NOI18N
        jTextPane1.setName("jTextPane1"); // NOI18N
        jScrollPane2.setViewportView(jTextPane1);

        jButton3.setText(resourceMap.getString("jButton3.text")); // NOI18N
        jButton3.setName("jButton3"); // NOI18N
        jButton3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton3ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(247, 247, 247)
                        .addComponent(jButton2)
                        .addGap(33, 33, 33)
                        .addComponent(jButton1)
                        .addGap(55, 55, 55)
                        .addComponent(jButton3))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(18, 18, 18)
                        .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 838, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap(39, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 512, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 47, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButton1)
                    .addComponent(jButton3)
                    .addComponent(jButton2))
                .addGap(37, 37, 37))
        );

        jButton3.getAccessibleContext().setAccessibleName(resourceMap.getString("jButton3.AccessibleContext.accessibleName")); // NOI18N

        pack();
    }// </editor-fold>

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                        
        // TODO add your handling code here:
        Document doc = jTextPane1.getStyledDocument();
        int istartPosition = 1;
        int iType = 1;
        int iPK = 1;
        SetAddText(istartPosition, iType, iPK, jTextPane1, doc);

        //        String str = "";
//        Document doc = jTextPane1.getStyledDocument();
//
//        str = jTextPane1.getText();
//
//
//        int iStart = str.indexOf("7891");
//        int iEnd = str.indexOf("1011");
//        try {
//            String strReplace = str.substring(iStart, iEnd);
//            System.out.println(strReplace);
//
//            doc.remove(iStart, strReplace.replace("\n", "").length());
//
//            doc.insertString(iStart, strReplace, getAddAttrSet());
//        } catch (BadLocationException ex) {
//            Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
//        }
//
//        jTextPane1.setSelectionStart(iStart);
//        jTextPane1.setSelectionEnd(iEnd);
//        jTextPane1.setSelectionEnd(iStart);
//        //DefaultStyledDocument.ElementEdit;
//        jTextPane1.setSelectedTextColor(Color.red);


    }                                       

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                        
        String str = "";
        for (int i = 0; i < 10; i++) {
            str += "" + i + (i + 1) + (i + 2) + (i + 3) + (i + 4) + "\r\n";
        }
        Document doc = jTextPane1.getStyledDocument();
        jTextPane1.setText(str);



    }                                       

    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        Document doc = jTextPane1.getStyledDocument();
        int istartPosition = 1;
        int iType = 1;
        int iPK = 1;
        SetDelText(istartPosition, iType, iPK, jTextPane1, doc);
    }

    /**
     * @param args the command line arguments
     */

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new NewJFrame().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton3;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JTextPane jTextPane1;
    // End of variables declaration

    /**
     * 返回 新添加属性样式
     *
     * @return
     */

    public SimpleAttributeSet getAddAttrSet() {
        SimpleAttributeSet attrSet = new SimpleAttributeSet();

        StyleConstants.setItalic(attrSet, false);
        StyleConstants.setUnderline(attrSet, false);
        StyleConstants.setFontSize(attrSet, 16);
        StyleConstants.setForeground(attrSet, Color.red);
        return attrSet;
    }

    /**
     * 返回 删除加属性样式
     *
     * @return
     */

    public SimpleAttributeSet getDelAttrSet() {
        SimpleAttributeSet attrSet = new SimpleAttributeSet();

        StyleConstants.setItalic(attrSet, true);
        StyleConstants.setUnderline(attrSet, true);
        StyleConstants.setFontSize(attrSet, 16);
        StyleConstants.setForeground(attrSet, Color.BLUE);
        StyleConstants.setStrikeThrough(attrSet, true);
        return attrSet;
    }

    /**
     * 设定添加文本颜色
     * @param istartPosition 字符开始检索位置
     * @param iType          类型:属性、段位、状态
     * @param iPK         设定属性PK
     */

    public void SetAddText(int istartPosition, int iType, int iPK, javax.swing.JTextPane jTextPaneObj, Document doc) {
        String strReplaceForm = "";
        istartPosition = 10;
        String strReplaceTo = "http://www.my400800.cn";
        SimpleAttributeSet attrSet = getAddAttrSet();
        SetText(istartPosition, jTextPaneObj, doc, strReplaceForm, strReplaceTo, attrSet);
    }

    /**
     * 设定添加文本颜色
     * @param istartPosition 字符开始检索位置
     * @param iType          类型:属性、段位、状态
     * @param iPK         设定属性PK
     */

    public void SetDelText(int istartPosition, int iType, int iPK, javax.swing.JTextPane jTextPaneObj, Document doc) {
        String strReplaceForm = "http://www.my400800.cn";
        String strReplaceTo = "http://www.my400800.cn";
        //istartPosition = 10;
        SimpleAttributeSet attrSet = getDelAttrSet();
        SetText(istartPosition, jTextPaneObj, doc, strReplaceForm, strReplaceTo, attrSet);
    }

    /**
     * 设定实际控件上的显示状态
     * @param istartPosition  文本检索开始位置
     * @param jTextPaneObj    文本存放控件
     * @param doc             属性设定样式雷
     * @param strReplaceForm  替换前内容(如果该值为空,重该位置直接插入)
     * @param strReplaceTo    替换后内容
     * @param attrSet
     */

    public void SetText(int istartPosition, javax.swing.JTextPane jTextPaneObj, Document doc, String strReplaceForm, String strReplaceTo, SimpleAttributeSet attrSet) {
        try {
            String str = jTextPaneObj.getText();
            int iStart = istartPosition;
            if (strReplaceForm != null && strReplaceForm.length() > 0) {
                istartPosition = str.replace("\n", "").indexOf(strReplaceForm, istartPosition);
                iStart = istartPosition;
                int iEnd = iStart + strReplaceTo.length();
                String strReplace = str.substring(iStart, iEnd);
                System.out.println(strReplace);
                doc.remove(iStart, strReplace.replace("\n", "").length());
            }
            doc.insertString(iStart, strReplaceTo, attrSet);
            jTextPane1.setSelectionStart(iStart);
            jTextPane1.setSelectionEnd(iStart + 1);

        } catch (BadLocationException ex) {
            Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

  • 大小: 44.9 KB
分享到:
评论
1 楼 pywepe 2012-02-22  
  再高级一点,一边输入一边替换样式

http://w.com/ 输入完成后自动变成 http://w.com/

相关推荐

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

    在Swing中实现一个编辑器,首先需要理解Swing的基础组件,如JFrame、JPanel和JTextComponent系列。JTextComponent是所有文本组件的基类,包括JTextField、JTextArea和JEditorPane。对于实现一个编辑器,JTextPane或...

    JAVA-----JTextPane实例

    在Java Swing库中,`JTextPane`是一个功能强大的文本组件,它允许显示和编辑富文本格式,包括字体、颜色和排版等特性。本文将深入探讨`JTextPane`的基本概念、功能以及如何在Java应用程序中使用它。 #### 一、`...

    JTextPane 关键字变色

    在Java GUI编程中,`JTextPane`是一个非常重要的组件,它属于Swing库,用于显示和编辑富文本。在给定的标题“JTextPane 关键字变色”和描述“SWT JTextPane 可以把控件中需要的字符串的颜色修改成自己想要的颜色”中...

    Java基于Swing实现的简单聊天室,支持多人在线闲谈.zip

    2. **事件监听**:在Swing中,事件处理是通过添加监听器来实现的。比如,当用户点击发送按钮时,需要触发一个事件,将输入的消息发送到服务器并更新聊天窗口。这通常涉及到ActionListener接口的实现。 3. **网络...

    Java Swing练习中的基础代码

    4. **FormatFrame.java**:这个名字暗示了这个文件可能涉及Swing中的文本格式化。可能包括使用JTextComponent家族(如JTextField、JTextArea)来展示和编辑格式化的文本,可能还涉及到JFormattedTextField或者...

    JAVA Swing 全教程

    与AWT中的组件不同,Swing组件不直接依赖于操作系统,而是用纯Java实现,这使得它们在各种平台上具有更好的一致性。此外,Swing提供了丰富的可定制性,允许开发者通过调整外观和行为来创建独特的用户界面。 **第2章...

    java swing语音聊天室,文字的有单聊,群聊,强制下线等

    文字聊天功能的实现依赖于Swing中的JTextArea和JTextPane组件,它们用于显示和输入文字信息。同时,事件监听器(ActionListener)用于捕捉用户点击发送按钮的动作,将输入的文字发送到服务器,并在接收方的界面上...

    Java Swing图形界面

    1. 事件监听器:Swing通过接口定义了一系列的事件监听器,如ActionListener、MouseListener、KeyListener等,开发者通过实现这些接口并添加到组件上,实现对用户操作的响应。 2. 事件适配器:为了简化编程,Swing...

    Java swing商城+简单聊天系统+论坛

    在Java Swing中,开发者可以创建出美观且功能强大的桌面应用程序,包括商城系统、聊天系统以及论坛等。 在"Java swing商城"项目中,Swing被用来构建一个模拟的电子商务平台。这个系统可能包含以下几个核心模块: 1...

    java swing简单版qq

    在Swing中,可以通过实现ActionListener接口并覆盖其actionPerformed方法来响应用户操作,如点击按钮发送消息。开发者可能为“发送”按钮添加了这样一个监听器,处理消息的发送和接收逻辑。同时,为了实时更新聊天...

    java swing 查找

    在Java Swing中,你可以构建出美观且功能丰富的用户界面。 标题“Java Swing 查找”意味着我们将探讨如何在Swing应用中实现文本查找或搜索功能。在Swing组件中,我们通常会用到JTextComponent,如JTextArea或...

    Java Swing项目

    通过实现ActionListener接口或使用匿名内部类,可以为组件添加事件监听器,以响应用户的操作,如按钮点击、菜单选择等。 Swing 还支持外观(LookAndFeel)定制,允许开发者更改应用程序的视觉风格,使其更符合目标...

    Java_ Swing, 2nd Edition

    事件处理是Swing中的关键概念,通过实现EventListener接口和相关的事件监听器,如ActionListener、MouseListener、KeyListener等,开发者可以响应用户的操作,实现交互功能。此外,Swing还支持模型-视图-控制器(MVC...

    java Swing 抽奖系统

    总的来说,这个Java Swing抽奖系统结合了Swing的组件特性,实现了图片导入、名单管理、抽奖逻辑以及文件操作等多种功能,为各种活动提供了便捷的抽奖解决方案。开发者通过熟练运用Java GUI技术,为用户创建了一个...

    java swing 聊天程序

    10. **网络编程**:使用Java的`Socket`或`ServerSocket`类进行网络通信,建立客户端和服务器之间的连接。考虑到性能和可靠性,可能还需要使用线程池管理和异常处理。 这个项目涵盖了Java Swing GUI开发、数据库操作...

    swingTextEditor:使用Java swing的简单文本编辑器

    总的来说,`swingTextEditor`项目是一个实践Java Swing GUI编程的好例子,它展示了如何使用Swing组件创建一个简单的文本编辑器,涵盖了从基础组件到事件处理、文件操作以及文本格式化的各种功能。通过学习这个项目,...

    使用java,swing 实现gps, 源码提供,

    使用java,swing 实现gps, 源码提供,简要如下: package gps; import java.awt.event.ActionListener; import javax.swing.*; import java.awt.event.*; import java.io.*; public class GpsFrame extends JFrame ...

    Java Swing数据模型

    通过理解和利用Swing中的数据模型,开发者可以更好地组织和管理应用程序的数据,同时保持界面的独立性,实现灵活和可扩展的代码结构。在实际开发中,尤其是在处理大量数据或需要动态更新界面的场景下,正确使用数据...

    数据库管理工具GUI例子(Java Swing)

    通过Java Swing,开发者可以创建一个功能齐全、易于使用的数据库管理工具,提高数据库操作的效率和便利性。这样的工具对于数据库管理员、开发者以及需要频繁与数据库交互的用户来说,都是非常实用的。

    MyEditor[swing界面-文本编辑器-功能实现版].rar

    这涉及到TextComponent类,如JTextArea或JTextPane,它们是Swing中处理文本的组件。这些组件支持文本插入、删除、剪切、复制和粘贴等基本操作,并可以通过Document对象进行更高级的文本处理,如设置字体、颜色,或者...

Global site tag (gtag.js) - Google Analytics