Java 高亮显示添加高亮显示不更改文本颜色

Java 高亮显示添加高亮显示不更改文本颜色,java,swing,jtextarea,highlighting,Java,Swing,Jtextarea,Highlighting,我有一个JTextArea,我使用从JTextArea获得的荧光笔的addHighlight方法高亮显示一些文本。它高亮显示文本,但不会将高亮显示文本的文本颜色更改为我设置的selectedTextColor 以下是一个例子: import java.awt.Color; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.Swin

我有一个JTextArea,我使用从JTextArea获得的荧光笔的addHighlight方法高亮显示一些文本。它高亮显示文本,但不会将高亮显示文本的文本颜色更改为我设置的selectedTextColor

以下是一个例子:

import java.awt.Color;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import javax.swing.text.BadLocationException;
import javax.swing.text.DefaultHighlighter;
import javax.swing.text.Highlighter;
import javax.swing.text.Highlighter.HighlightPainter;

public class SSCCE {

    private JFrame frame;
    private JTextArea textArea;

    public SSCCE() {
        frame = new JFrame();
        frame.setTitle("Huge Text");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        textArea = new JTextArea("abcd abcd abcd");
        textArea.setBackground(Color.DARK_GRAY);
        textArea.setForeground(Color.LIGHT_GRAY);
        textArea.setSelectionColor(Color.LIGHT_GRAY);
        textArea.setSelectedTextColor(Color.DARK_GRAY);
        Highlighter highLighter = textArea.getHighlighter();
        HighlightPainter highLightPainter = new DefaultHighlighter.DefaultHighlightPainter(textArea.getSelectionColor());
        try {
            highLighter.addHighlight(0, 10, highLightPainter);
        } catch (BadLocationException e) {
            e.printStackTrace();
        }
        frame.add(new JScrollPane(textArea));

        frame.setSize(400, 350);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new SSCCE();
            }
        });
    }

}
值得一读

  • 如果要使用未设置样式的文本组件,请选择文本字段、密码字段、格式化文本字段或文本区域

  • 如果要使用样式化文本组件,请参阅

JTextArea
不支持为整个内容的子集设置样式的功能。它应用样式,但覆盖整个内容


在这里找到一个示例代码

事实上,JTextArea确实有高亮支持,正如演示的那样,@MadProgrammer我可以只在JTextArea中更改所选文本的颜色和字体吗?在第二个示例代码中,它刚刚高亮显示。如果OP只对
textArea.setForeground(Color.BLUE)进行一次更改,它就可以正常工作
以选择颜色区分。不,但OP没有这样做,他们使用的是荧光灯;)OP表示高亮显示的文本与所选文本颜色的前景颜色为浅灰色,OP只希望所选文本的前景颜色为深灰色。高亮显示和选择是不同的,高亮显示不影响文本颜色