6

これは、おそらくチームプロジェクトにとっても、1人の実装では言うまでもなく、少し難しいことですが、シンタックスハイライトを備えたシンプルでエレガントなテキストエディタを、を使用してまとめようとしていましたJEditorPane。私はこれに遭遇しましが、これは廃止されており、すべてのレクサーファイルと.lexのものが含まれているので理解するのが非常に困難でした。いくつかのブログで、このプロジェクトが後で他のチームによって引き継がれたが、それでもまた中止されたことがわかりました。コードの折り畳みなどを行うなど、あまり凝ったものである必要はありませんが(これを行う方法を見つけたくなりますが)、少なくとも基本的な構文の強調表示とほとんどの行番号が必要です。たとえば、Notepad++のように左端にあります。少なくとも今のところ、Javaソースコードを強調するためだけに必要なことを覚えておいてください。

私が探しているのは、チュートリアル、十分に文書化された例とサンプルコード、事前に作成されたパッケージ、NetBeansのツールでさえもトリックを実行できる、ソースコードを最初から作成する必要はなく、必要なだけです。役立つ実装。前もって感謝します!

PSこれは商業的でも大きすぎるものでもありません。プログラミング編集者が非常に多いのに、なぜ車輪の再発明をしたいのかと聞かないでください。私は学んでおり、これは私にとって素晴らしい演習として思いついたものです。

4

2 に答える 2

6

RSyntaxTextAreaはBSDライセンスであり、要件に加えて、コード折り畳みなどをサポートします。使い方はとても簡単です。

于 2012-10-03T03:18:49.167 に答える
1

さて、私は同様のプロジェクトに取り組みました、そしてこれが私が思いついたものです。行番号に関しては、実際のテキストペインに接続されたスクロールペインを使用しました。スクロールペインは、次のコードで数字を変更していました。

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();
}
}

構文の強調表示は簡単な作業ではありませんが、私が始めたのは、特定の言語のすべてのキーワードを含むいくつかのテキストファイルに基づいて文字列を検索できるようにすることでした。基本的に、ファイルの拡張子に基づいて、関数は正しいファイルを見つけ、そのファイル内でテキスト領域に含まれている単語を探します。

于 2016-12-30T02:51:04.260 に答える