Текущий редактор с выделением синтаксиса и номерами строк?
-
12-12-2019 - |
Вопрос
Это немного сложно, даже возможно, для командного проекта, не говоря уже о реализации одного человека, но я пытался собрать простой, но элегантный текстовый редактор с помощью синтаксиса, используя JEditorPane
. Я наткнулся на Это , который был прекращен и очень трудно понять со всеми файлами lexer и .lex вещи внутри. Я даже нашел в каком-то блоге, что этот проект был позже, был принят какой-то другой командой, но даже снова прекращены. Мне не нужно, чтобы быть слишком модным, например, складной для кода и прочее (даже если я искушаю, чтобы выяснить, как это сделать), но мне нужно хотя бы базовый синтаксис, подчеркивающий и в значительной степени строки на дальней левой стороне, например, например, блокнот ++. Имейте в виду, что мне нужно только для того, чтобы выделить исходный код Java, по крайней мере, на данный момент.
Что я ищу, это либо учебное пособие, хорошо документированный пример и код пример, предварительно сделанный пакет, даже инструмент для NetBeans может сделать трюк, я не обязательно нужен исходный код, написанный с нуля, Мне просто нужна реализация, которая может быть использована. Заранее спасибо!
psthis не будет коммерческим или слишком большим, не спрашивайте, почему я хочу изобретать колесо, когда там так много редакторов программирования, я учусь, и это придумал для меня хорошее упражнение! < / P >.
Решение
rsyntaxtextarea - это лицензированная BSD и поддерживает ваши требования, а также складывание кода и многое другое.Очень просто использовать.
Другие советы
Ну, я работал над аналогичным проектом, и вот что я придумал.Насколько номера линии идут я использовал Scrollpane, прикрепленную к фактической текстовой панели.Scrollpane затем меняли номера со следующим кодом:
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();
}
}
.
Выделение синтаксиса не является легкой задачей, но то, что я начал с возможностью искать строки, основанные на некоторых текстовых файлах, которые содержали все ключевые слова для определенного языка.В основном на основе расширения файла функция найдет правильный файл и искать слова в этом файле, содержащемся в текстовой области.