应用DefaultHighlighter.DefaultHighlightPainter时,如何在JTextPane中更改文本选择颜色?

时间:2014-01-22 08:53:46

标签: java highlight jtextpane

我有JTextPane个对象。我已添加DefaultHighlighter.DefaultHighlightPainter荧光笔,如下所示:

DefaultHighlighter.DefaultHighlightPainter high = new DefaultHighlighter.DefaultHighlightPainter(Color.GREEN);
try {
   jTextPane1.getHighlighter().addHighlight(0, 20, high);
} catch (BadLocationException ex) {
   ex.printStackTrace();
}

现在,我想用鼠标选择(突出显示)文字。当我这样做时,文本的绿色部分不会以蓝色突出显示。我希望当我用鼠标选择它时,所有文本都会以蓝色突出显示。我怎么能解决这个问题?

Selection issue

2 个答案:

答案 0 :(得分:0)

尝试用扩展名替换DefaultHighlighter,覆盖方法

从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);
            }
        }
    }
}

答案 1 :(得分:0)

也许你可以尝试这样的事情:

UIManager.put("JTextPane.selectionBackground", new javax.swing.plaf.ColorUIResource(Color.YELLOW)); 

在创建JTextPane之前执行此操作。