java - 在 JTextArea 中突出显示选定的行

标签 java swing jtextarea swing-highlighter

我一直在寻找一种方法来突出显示 JTextArea 中的选定行。有很多关于如何在 JTextArea 中突出显示文本的帖子,但它只涉及到字母。我希望能够突出显示整行(就像 Eclipse 编辑器在您单击一行时突出显示您所在的整个当前行一样)。我发现的所有帖子都建议使用 Highlighter 对象,但我不确定这是否会突出显示 JTextArea 的非字符区域。另外,有没有办法找到 JTextArea 中选定的行是什么?不是有多少行,而是选定的行(比如有人点击返回到较早的点)。还是计算过程非常复杂?

最佳答案

您需要关闭分层高光:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.*;

public class SSCCE extends JPanel
{
    public SSCCE()
    {
        JTextArea textArea = new JTextArea(4, 30);
        textArea.setText("one\ntwo\nthree");
        add( new JScrollPane(textArea) );


        DefaultHighlighter highlighter =  (DefaultHighlighter)textArea.getHighlighter();
        DefaultHighlighter.DefaultHighlightPainter painter = new DefaultHighlighter.DefaultHighlightPainter( Color.RED );
        highlighter.setDrawsLayeredHighlights(false); // this is the key line

        try
        {
            int start =  textArea.getLineStartOffset(1);
            int end =    textArea.getLineEndOffset(1);
            highlighter.addHighlight(start, end, painter );
        }
        catch(Exception e)
        {
            System.out.println(e);
        }
    }


    private static void createAndShowGUI()
    {
        JFrame frame = new JFrame("SSCCE");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(new SSCCE());
        frame.setLocationByPlatform( true );
        frame.pack();
        frame.setVisible( true );
    }

    public static void main(String[] args)
    {
        EventQueue.invokeLater( () -> createAndShowGUI() );
/*
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowGUI();
            }
        });
*/
    }
}

您可能还想查看 Line Painter插入符号移动时将突出显示当前行的类。所以这个类将管理亮点。也就是说,当插入符从一行移动到另一行时,先前的突出显示被删除并添加了新的突出显示。

关于java - 在 JTextArea 中突出显示选定的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33705234/

相关文章:

java - 如何在运行时更改 JTextArea 的位置?

java - JAVA中HTTP POST和GET请求+Javascript调用的结合?

java - Selenium (chromedriver) 中的 Xpath 不会匹配第二个标签

java - 具有多行文本文件的输入流读取器

java - BorderLayout.CENTER 内的 JScrollPane 不调整大小

java - 在运行时刷新 Swing 元素的语言

java - 在 JTextArea 的数组列表中显示元素

java - 当我在 edittext 上不输入任何内容时应用程序崩溃

java - 在 JMeter 的 CSV 数据集中,每个线程使用相同的行

java - 从 "Filthy Rich Clients"开始理解Swing代码