One*_*ror 3 java user-interface swing jeditorpane
我在一个框架中打开一个文件,我想强调一些单词.据我所知,我需要遍历文件的内容.如何遍历内容以及我可能用于突出显示的相关属性是什么?
更新:我的代码似乎有点像这样
private JEditorPane editorpane;
JScrollPane editorScrollPane;
public TextEditor()
{
editorpane = new JEditorPane();
editorpane.setEditable(false);
if (filename != null)
{
try
{
File file = new File(filename);
editorpane.setPage(file.toURI().toURL());
}
catch (IOException e)
{
e.printStackTrace();
System.err.println("Attempted to read a bad file ...");
}
}
else
{
System.err.println("File name is wrong");
}
add(editorpane);
}
Run Code Online (Sandbox Code Playgroud)
要突出显示JEditorPane一下这个例子:

import java.awt.Color;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.text.BadLocationException;
import javax.swing.text.DefaultHighlighter;
import javax.swing.text.Document;
import javax.swing.text.Highlighter;
import javax.swing.text.JTextComponent;
public class Test {
// An instance of the subclass of the default highlight painter
static MyHighlightPainter myHighlightPainter = new MyHighlightPainter(Color.red);
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JEditorPane jep = new JEditorPane();
jep.setText("Hello to the public");
frame.add(jep);
frame.pack();
frame.setVisible(true);
highlight(jep, "public");//'public is the word to highligh'
}
});
}
// Creates highlights around all occurrences of pattern in textComp
public static void highlight(JTextComponent textComp, String pattern) {
// First remove all old highlights
removeHighlights(textComp);
try {
Highlighter hilite = textComp.getHighlighter();
Document doc = textComp.getDocument();
String text = doc.getText(0, doc.getLength());
int pos = 0;
// Search for pattern
while ((pos = text.indexOf(pattern, pos)) >= 0) {
// Create highlighter using private painter and apply around pattern
hilite.addHighlight(pos, pos + pattern.length(), myHighlightPainter);
pos += pattern.length();
}
} catch (BadLocationException e) {
}
}
// Removes only our private highlights
public static void removeHighlights(JTextComponent textComp) {
Highlighter hilite = textComp.getHighlighter();
Highlighter.Highlight[] hilites = hilite.getHighlights();
for (int i = 0; i < hilites.length; i++) {
if (hilites[i].getPainter() instanceof MyHighlightPainter) {
hilite.removeHighlight(hilites[i]);
}
}
}
}
class MyHighlightPainter extends DefaultHighlighter.DefaultHighlightPainter {
public MyHighlightPainter(Color color) {
super(color);
}
}
Run Code Online (Sandbox Code Playgroud)