Java 应用DefaultHighlighter.DefaultHighlightPainter时,如何更改JTextPane中的文本选择颜色?
我有一个JTextPane对象。我添加了DefaultHighlighter.DefaultHighlightPainter highlighter,如下所示:Java 应用DefaultHighlighter.DefaultHighlightPainter时,如何更改JTextPane中的文本选择颜色?,java,highlight,jtextpane,Java,Highlight,Jtextpane,我有一个JTextPane对象。我添加了DefaultHighlighter.DefaultHighlightPainter highlighter,如下所示: DefaultHighlighter.DefaultHighlightPainter high = new DefaultHighlighter.DefaultHighlightPainter(Color.GREEN); try { jTextPane1.getHighlighter().addHighlight(0, 20, h
DefaultHighlighter.DefaultHighlightPainter high = new DefaultHighlighter.DefaultHighlightPainter(Color.GREEN);
try {
jTextPane1.getHighlighter().addHighlight(0, 20, high);
} catch (BadLocationException ex) {
ex.printStackTrace();
}
UIManager.put("JTextPane.selectionBackground", new javax.swing.plaf.ColorUIResource(Color.YELLOW));
现在,我想用鼠标选择高亮显示文本。当我这样做时,文本的绿色部分不会以蓝色突出显示。我希望当我用鼠标选择它时,所有的文本都会以蓝色突出显示。我怎样才能解决这个问题
尝试将DefaultHighlighter替换为覆盖该方法的扩展Highlighter
从0开始
public void paintLayeredHighlights(Graphics g, int p0, int p1,
Shape viewBounds,
JTextComponent editor, View view) {
for (int counter = highlights.size() - 1; counter >= 0; counter--) {
HighlightInfo tag = highlights.elementAt(counter);
if (tag instanceof LayeredHighlightInfo) {
LayeredHighlightInfo lhi = (LayeredHighlightInfo)tag;
int start = lhi.getStartOffset();
int end = lhi.getEndOffset();
if ((p0 < start && p1 > start) ||
(p0 >= start && p0 < end)) {
lhi.paintLayeredHighlights(g, p0, p1, viewBounds,
editor, view);
}
}
}
}
也许你可以试试这样的东西:
DefaultHighlighter.DefaultHighlightPainter high = new DefaultHighlighter.DefaultHighlightPainter(Color.GREEN);
try {
jTextPane1.getHighlighter().addHighlight(0, 20, high);
} catch (BadLocationException ex) {
ex.printStackTrace();
}
UIManager.put("JTextPane.selectionBackground", new javax.swing.plaf.ColorUIResource(Color.YELLOW));
在创建JTextPane之前执行此操作。HighlightInfo类在描述时没有访问级别修饰符,因此我无法在扩展类中使用此类。抱歉,它没有帮助