0

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*しかし、蛍光ペン コードでこれらの位置を使用すると、必要なものが強調表示されません。EG "in" は蛍光ペンのみにする必要があります。これが出力として得られるものです。JTextAreaにロードされると、位置が変更されていると思います。*強いテキスト

ハイライター コード:

  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 ?

誰か助けてくれませんか。ありがとう

4

1 に答える 1

0

JTextAreaにロードされると、位置が変更されていると思います。

Windows では、改行文字列は "\r\n" で、これは 2 文字です。ドキュメントにテキスト ファイルをロードすると、ドキュメントは "\n" を 1 文字のみの行末文字列として使用します。したがって、強調表示のオフセットは、ファイル内の新しい行ごとに 1 ずつずれます。

また、私たちはあなたのテキスト ファイルにアクセスできないため、あなたが何を説明しているのかわかりません。SSCCE を投稿するときは、それが完全であることを確認してください。したがって、代わりに次のことができます。

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

ここでコードを実行すると、有効なテキスト ファイルも読み取ることができます。

于 2013-02-23T17:30:52.407 に答える