有没有一种方法可以过滤/搜索HTMLEditorKit中的内容? [英] Is there a way to filter / search for content in a 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屋!