【问题标题】:How to change text selection color in JTextPane when DefaultHighlighter.DefaultHighlightPainter is applied?应用 DefaultHighlighter.DefaultHighlightPainter 时如何更改 JTextPane 中的文本选择颜色?
【发布时间】:2014-02-12 05:34:29
【问题描述】:

我有JTextPane 对象。我已经像这样添加了DefaultHighlighter.DefaultHighlightPainter 荧光笔:

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

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

【问题讨论】:

    标签: java highlight jtextpane


    【解决方案1】:

    尝试将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);
                }
            }
        }
    }
    

    【讨论】:

    • HighlightInfo 类被描述为没有访问级别修饰符,所以我不能在我的扩展类中使用这个类。
    【解决方案2】:

    也许你可以试试这样的:

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

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

    【讨论】:

    • 抱歉,没用
    猜你喜欢
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多