Подсветка синтаксиса JEditorPane с использованием jsyntaxpane

У меня есть JEditorPane в моем приложении, и я загружал в него java-файлы, используя jsyntaxpane и следующий код, и он отлично работал:

Чтобы выделить

jsyntaxpane.DefaultSyntaxKit.initKit();
textarea.setContentType("text/java");

загрузить файл в

int a = filesToCompileList.getSelectedIndex();
FileReader reader = new FileReader(file);
BufferedReader br = new BufferedReader(reader);
textarea.read.read(br, index);
br.close();
textarea.requestFocus();

но знайте, что мне пришлось изменить способ загрузки файла, и в настоящее время я загружаю файлы, например

File file = new File(filePath);
textarea.setPage(file.toURI().toURL());

это загружает файлы так, как я хочу, но больше не выделяет текст для java-файлов! Кто-нибудь знает, как я могу это исправить или заставить Java выделяться по-другому?


person flexinIT    schedule 17.07.2012    source источник


Ответы (1)


Насколько я знаю, это невозможно сделать, если вы не реализуете свою собственную версию панель редактирования. Из javadoc

Метод setPage можно использовать для инициализации компонента из URL-адреса. В этом случае тип контента будет определяться по URL-адресу, и для этого типа контента будет установлен зарегистрированный EditorKit.

Таким образом, MIME-тип контента будет унаследован от MIME-типа URL-адреса. Вызов setContentyType позже не будет иметь никакого эффекта, так как это изменит модель jeditorpane, очистив содержимое. Снова из Javadoc

ПРИМЕЧАНИЕ. Это имеет побочный эффект изменения модели, поскольку EditorKit является источником того, как моделируется определенный тип контента. Этот метод вызывает вызов setDocument от имени вызывающего объекта для обеспечения целостности внутреннего состояния.

Поэтому вы должны продолжать использовать метод чтения.

person Francisco Puga    schedule 11.12.2012