有没有一种方法可以过滤/搜索HTMLEditorKit中的内容? [英] Is there a way to filter / search for content in a HTMLEditorKit?

查看:41
本文介绍了有没有一种方法可以过滤/搜索HTMLEditorKit中的内容?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个普通的HTMLEditorKit()对象:

I have a normal HTMLEditorKit() object:

        historyKit = new HTMLEditorKit();
        historyDoc = new HTMLDocument();
        history = new JEditorPane("text/html", "");
        JScrollPane historyScrollPane = new JScrollPane(history);
        historyPanel.add(historyScrollPane, "cell 0 0 1 2,grow");
        history.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null,
                null, null));

我将其用作某种日志",因此它会根据此对象进行更新:

I use it as some sort of "log", so it gets updated according to this object:

public class Logger {

    public static ArrayList<String[]> log = new ArrayList<String[]>();

    public static void update(String s) {
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy | HH:mm:ss");
        String historyText = "<b>" + sdf.format(new Date()) + "</b>: " + s;
        String[] sArray = { sdf.format(new Date()), s };
        log.add(sArray);
        append(historyText);
    }

    public static void append(String s) {
        MainFrame.history.setEditorKit(MainFrame.historyKit);
        MainFrame.history.setDocument(MainFrame.historyDoc);
        try {
            MainFrame.historyKit.insertHTML(MainFrame.historyDoc,
                    MainFrame.historyDoc.getLength(), s, 0, 0, null);
        } catch (BadLocationException | IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

事实是,我认为遍历"数据结构以便根据某些JTextField过滤内容要比遍历"组件本身(在这种情况下,模型,我想).有一种使用文本字段作为搜索字段"来过滤文档的众所周知的方法吗?

The thing is, I believe it would more complicated to "traverse" the data structure in order to filter the content according to some JTextField, than it would be to "traverse" the component itself (In that case, the model, I suppose). Is there a well-known way of filtering documents, using a text field as a "search field"?

推荐答案

我正在使用HTML工具包,以便可以突出显示文本的不同部分

I'm using the HTML kit so that I can highlight different parts of the text

JTextPane 可以用于不同的字体,颜色等.

A JTextPane can be used with different fonts, colors etc.

这是一个入门的简单示例:

Here is a simple example to get you started:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.*;

public class TextPaneAttributes extends JPanel
{

    public TextPaneAttributes()
    {
        setLayout( new BorderLayout() );

        JTextPane textPane = new JTextPane();
        textPane.setText( "one\ntwo\nthree\nfour\nfive\nsix\nseven\neight" );

        StyledDocument doc = textPane.getStyledDocument();

        //  Define some character and paragraph attribute sets

        SimpleAttributeSet keyWord = new SimpleAttributeSet();
        StyleConstants.setBold(keyWord, true);

        SimpleAttributeSet green = new SimpleAttributeSet();
        StyleConstants.setForeground(green, Color.GREEN);

        SimpleAttributeSet center = new SimpleAttributeSet();
        StyleConstants.setAlignment(center, StyleConstants.ALIGN_CENTER);

        SimpleAttributeSet left = new SimpleAttributeSet();
        StyleConstants.setAlignment(left, StyleConstants.ALIGN_LEFT);

        //  Change attributes on some existing text

        doc.setCharacterAttributes(0, 3, keyWord, false);
        doc.setCharacterAttributes(8, 5, green, true);
        doc.setParagraphAttributes(20, 1 , center, false);

        //  Add some text with attributes

        try
        {
            doc.insertString(doc.getLength(), "\nNormal text", null);
            doc.insertString(doc.getLength(), "\nGreen text centered", green);
            doc.setParagraphAttributes(doc.getLength(), 1 , center, false);
            doc.insertString(doc.getLength(), "\nKeyword text", keyWord);
            doc.setParagraphAttributes(doc.getLength(), 1 , left, false);

            //  Newly typed text at the end of the document will inherit the
            //  "keyword" attributes unless we remove the attributes

            textPane.setCaretPosition(doc.getLength());
            textPane.getInputAttributes().removeAttributes(keyWord);
        }
        catch(Exception e) {}

        //  Add text pane to frame

        JScrollPane scrollPane = new JScrollPane( textPane );
        scrollPane.setPreferredSize( new Dimension( 200, 250 ) );
        add( scrollPane );

        //  Create a Button panel

        JPanel buttons = new JPanel();
        add(buttons, BorderLayout.PAGE_END);

        //  Add a Bold button

        JButton bold = new JButton( new StyledEditorKit.BoldAction() );
        buttons.add( bold );

        //  Add Right Alignment button

        JButton right = new JButton( new StyledEditorKit.AlignmentAction("Align Right", StyleConstants.ALIGN_RIGHT) );
        buttons.add( right );
    }

    private static void createAndShowGUI()
    {
        JFrame frame = new JFrame("SSCCE");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(new TextPaneAttributes());
        frame.pack();
        frame.setLocationByPlatform( true );
        frame.setVisible( true );
    }

    public static void main(String[] args)
    {
        EventQueue.invokeLater( () -> createAndShowGUI() );
/*
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowGUI();
            }
        });
*/
    }
}

文本组件功能上,从Swing教程中阅读本节.a>有关更多信息和示例.

Read the section from the Swing tutorial on Text Component Features for more information and example.

这篇关于有没有一种方法可以过滤/搜索HTMLEditorKit中的内容?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆