【问题标题】:How to Highlight a String in JTextArea By Start and End Position in Java如何在 Java 中通过开始和结束位置突出显示 JTextArea 中的字符串
【发布时间】:2013-02-23 17:10:13
【问题描述】:

我有一个正在 JTextArea 中读取的文本文件。

我有另一个程序可以提供文本文件中字符串的开始和结束位置。

但是当我在 JTextArea 中应用 Highlighter 时,它并没有突出显示我想要的。

我的文本文件包含:

public class John {

public static void main(String[] args)
{
    System.out.println("Hello World");

    in x;

    }

}

我有一个编译器,它给我以这种格式发生错误的位置:

Code: compiler.err.cant.resolve.location
Kind: ERROR
Line Number: 7
End position: 118
Start Position: 116

strong text*但是当我在我的荧光笔代码中使用这些位置时,它并没有突出显示我想要的内容。 例如“in”应该只是荧光笔。这是我得到的输出。我相信这些位置在 JTextArea 中加载时会发生变化。*strong text

荧光笔代码:

  import java.awt.*;
  import java.io.FileReader;

  import javax.swing.*;
  import javax.swing.text.*;

  public class KerlovHighlighter {

private static final long serialVersionUID = 1L;
private Highlighter.HighlightPainter cyanPainter;
private Highlighter.HighlightPainter redPainter;

public KerlovHighlighter() {
    JFrame frame = new JFrame();
    JTextPane textPane = new JTextPane();
    try {
        textPane.read(new FileReader("C:\\Users\\Antish\\workspace\\Testing\\src\\MyC.java"), null);
      } catch (Exception e) {
        System.out.println("Failed to load file " );
        System.out.println(e);
      }
    JScrollPane scrollPane = new JScrollPane(textPane);
    frame.add(scrollPane, BorderLayout.CENTER);//  Highlight some text
    cyanPainter = new DefaultHighlighter.DefaultHighlightPainter(Color.cyan);
    redPainter = new DefaultHighlighter.DefaultHighlightPainter(Color.red);
    try {
        textPane.getHighlighter().addHighlight(116, 118, DefaultHighlighter.DefaultPainter);

    } catch (BadLocationException ble) {
    }
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setPreferredSize(new Dimension(300, 200));
    frame.setLocationRelativeTo(null);
    frame.pack();
    frame.setVisible(true);
}

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

        @Override
        public void run() {
            KerlovHighlighter tph = new KerlovHighlighter();
        }
    });
}

}

代码输出:

[1]: http://prntscr.com/tuyqw "Output of Program"

原始文本文件: http://www.mediafire.com/?aiufxocfj0xm21e?

有人可以帮忙吗。谢谢

【问题讨论】:

    标签: java file jtextarea


    【解决方案1】:

    我相信这些位置在加载到 JTextArea 时会发生变化。

    在 Windows 中,新行字符串是“\r\n”,它是两个字符。当您将文本文件加载到文档中时,文档使用“\n”作为行尾字符串,它只是一个字符。因此,对于文件中的每一行,突出显示的偏移量都会减少一个。

    此外,我们无权访问您的文本文件,因此我们无法看到您所描述的内容。当您发布 SSCCE 时,请确保它是完整的。所以你可以这样做:

    //textPane.read(new FileReader("C:\\Users\\Antish\\workspace\\Testing\\src\\MyC.java"), null);
    textPane.read(new FileReader("KerlovHighlighter.java"), null);
    

    现在,如果我们执行您的代码,我们还有一个有效的文本文件可供读取。

    【讨论】:

    • 那么我将如何调用我的 TextFile? Myc.Java
    • 我说的是一个 SSCCE,您可以在其中使用源文件来演示您的问题。一旦问题得到解决,您就可以使用您的真实文件。
    猜你喜欢
    • 2020-01-15
    • 1970-01-01
    • 2015-03-11
    • 2012-11-27
    • 1970-01-01
    • 1970-01-01
    • 2013-03-05
    • 1970-01-01
    • 2013-02-26
    相关资源
    最近更新 更多