構文の強調表示と行番号を備えたテキスト エディター?
-
12-12-2019 - |
質問
これは、一人で実装する場合はもちろんのこと、おそらくチーム プロジェクトであっても少し難しいことですが、私は、 JEditorPane
. 。つまずいた これ これは廃止されましたが、レクサー ファイルや .lex が含まれているため、理解するのが非常に困難でした。このプロジェクトは後に他のチームによって引き継がれたものの、再び中止されたことも、あるブログで知りました。コードを折りたたんだりするなど、あまり派手にする必要はありません (これを行う方法を知りたくなるかもしれませんが)、少なくとも 基本的な構文の強調表示 存在すること、そしてほとんど 行番号 たとえば、Notepad++ のように、一番左側にあります。少なくとも現時点では、Java ソースコードを強調表示するためにのみ必要であることに留意してください。
私が探しているのは、チュートリアル、十分に文書化された例とサンプル コード、既成のパッケージ、または NetBeans 用のツールでも機能します。ソース コードを最初から作成する必要はありません。必要なのは、役に立ちそうな実装。前もって感謝します!
P.S. これは商業的なものではありませんし、あまり大掛かりなものではありません。世の中にはプログラミング エディターがたくさんあるのに、なぜ車輪の再発明をする必要があるのかは聞かないでください。私は学んでおり、これは私にとって良い練習になりました。
解決
RSyntaxTextArea BSD ライセンスを取得しており、要件に加えてコードの折りたたみなどをサポートしています。使い方はとても簡単です。
他のヒント
さて、私も同様のプロジェクトに取り組みましたが、ここに私が思いついたものがあります。行番号に関しては、実際のテキストペインに接続されたスクロールペインを使用しました。スクロールペインは次のコードで数値を変更していました。
public class LineNumberingTextArea extends JTextArea
{
private JTextPane textArea;
/**
* This is the contructor that creates the LinNumbering TextArea.
*
* @param textArea The textArea that we will be modifying to add the
* line numbers to it.
*/
public LineNumberingTextArea(JTextPane textArea)
{
this.textArea = textArea;
setBackground(Color.BLACK);
textArea.setFont(new Font("Consolas", Font.BOLD, 14));
setEditable(false);
}
/**
* This method will update the line numbers.
*/
public void updateLineNumbers()
{
String lineNumbersText = getLineNumbersText();
setText(lineNumbersText);
}
/**
* This method will set the line numbers to show up on the JTextPane.
*
* @return This method will return a String which will be added to the
* the lineNumbering area in the JTextPane.
*/
private String getLineNumbersText()
{
int counter = 0;
int caretPosition = textArea.getDocument().getLength();
Element root = textArea.getDocument().getDefaultRootElement();
StringBuilder lineNumbersTextBuilder = new StringBuilder();
lineNumbersTextBuilder.append("1").append(System.lineSeparator());
for (int elementIndex = 2; elementIndex < root.getElementIndex(caretPosition) +2;
elementIndex++)
{
lineNumbersTextBuilder.append(elementIndex).append(System.lineSeparator());
}
return lineNumbersTextBuilder.toString();
}
}
構文の強調表示は簡単な作業ではありませんが、私がまず始めたのは、特定の言語のすべてのキーワードを含むテキスト ファイルに基づいて文字列を検索できるようにすることでした。基本的に、この関数はファイルの拡張子に基づいて正しいファイルを見つけ、そのファイル内でテキスト領域内に含まれる単語を探します。