【问题标题】:Highlighting a selected line in JTextArea突出显示 JTextArea 中的选定行
【发布时间】:2016-02-15 18:31:41
【问题描述】:

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

【问题讨论】:

    标签: java swing jtextarea swing-highlighter


    【解决方案1】:

    您需要关闭分层高光:

    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 类,它会在移动插入符号时突出显示当前行。所以这个类将管理亮点。也就是说,当插入符号从一行移动到另一行时,之前的突出显示被删除并添加了一个新的突出显示。

    【讨论】:

      猜你喜欢
      • 2012-04-28
      • 2013-10-25
      • 1970-01-01
      • 2020-12-17
      • 2012-06-18
      • 2013-06-26
      • 1970-01-01
      • 2013-12-20
      • 2011-06-16
      相关资源
      最近更新 更多