- PVSM.RU - https://www.pvsm.ru -

JForge: Создаем свою мини-IDE на Java Swing с нуля (с темной темой и подсветкой синтаксиса!)

JForge: Создаем свою мини-IDE на Java Swing с нуля (с темной темой и подсветкой синтаксиса!) - 1

Jacquard

Ссылка на GitHub: https://github.com/Jacqquard [1]

Каждый из нас, Java-разработчиков, хоть раз задумывался: "А что, если взять и написать свою IDE?". Ну, может, не полноценную замену IntelliJ IDEA [2], но что-то компактное, для души, для изучения Swing [3] или просто для фана. Сегодня я хочу поделиться именно таким проектом – JForge [4], простой IDE для Java, написанной полностью на Swing [3], с акцентом на приятный темный интерфейс и базовые, но необходимые фичи.

Этот проект начинался как эксперимент "а смогу ли?", но постепенно оброс функционалом, который делает его вполне юзабельным для небольших Java-проектов или быстрого прототипирования.

Ссылка на репозиторий: https://github.com/Jacqquard/JForge-v.0.1A [4]

Что умеет JForge?

  • Темная тема: Приятный для глаз интерфейс, полностью кастомизированный через UIManager.

  • Редактор кода: На базе JTextPane с поддержкой отмены/повтора действий (UndoManager).

  • Нумерация строк: Кастомный компонент, отображающий номера строк слева от редактора.

  • Подсветка синтаксиса Java: Базовая подсветка для ключевых слов, комментариев (однострочных и многострочных) и строковых литералов.

  • Работа с файлами: Создание, открытие, сохранение, "Сохранить как...".

  • Компиляция и запуск: Встроенная возможность скомпилировать текущий .java файл и запустить его, с выводом в интегрированную консоль.

  • Консоль вывода: JTextArea для отображения сообщений компилятора и вывода запущенной программы.

  • Разделитель: JSplitPane для удобного изменения размеров областей редактора и консоли.

Архитектура и ключевые компоненты

1. Темная тема всему голова!

Первое, что бросается в глаза – это темный интерфейс. Для его реализации не использовались сторонние LookAndFeel библиотеки. Вместо этого, я пошел по пути настройки стандартных свойств UIManager. Это дает полный контроль над каждым элементом.

JForge: Создаем свою мини-IDE на Java Swing с нуля (с темной темой и подсветкой синтаксиса!) - 2

Этот подход требует терпения, так как приходится перебирать множество ключей UIManager, но результат того стоит – единый стиль во всем приложении. Особое внимание уделено таким деталям, как цвет каретки, выделения текста, фона меню и элементов управления.

2. Сердце IDE – редактор кода

Редактор кода реализован с помощью JTextPane. Это позволяет не только вводить текст, но и применять к нему различные стили, что критично для подсветки синтаксиса.

JForge: Создаем свою мини-IDE на Java Swing с нуля (с темной темой и подсветкой синтаксиса!) - 3

Для отмены/повтора действий используется стандартный UndoManager. Каждое изменение в документе редактора регистрируется, позволяя легко откатывать или накатывать правки через меню "Edit" или горячие клавиши (Ctrl+Z, Ctrl+Y).

3. Нумерация строк – как в больших IDE

Для отображения номеров строк рядом с редактором написан отдельный класс TextLineNumber. Этот компонент:

  • Размещается в RowHeader у JScrollPane, в который обернут editorPane.

  • Слушает изменения в документе редактора (DocumentListener), чтобы перерисовываться и обновлять ширину при добавлении/удалении строк.

  • Слушает изменения шрифта редактора (PropertyChangeListener), чтобы синхронизировать свой шрифт.

  • Динамически рассчитывает свою ширину в зависимости от максимального номера строки.

  • В методе paintComponent отрисовывает номера строк, выравнивая их по правому краю и синхронизируя с видимой областью редактора.

JForge: Создаем свою мини-IDE на Java Swing с нуля (с темной темой и подсветкой синтаксиса!) - 4

Этот компонент добавляет удобства при навигации по коду, особенно в больших файлах.

4. Подсветка синтаксиса Java

Подсветка синтаксиса – одна из самых визуально приятных фич. В JForge [4] она реализована с использованием StyledDocument (который JTextPane предоставляет по умолчанию) и регулярных выражений.

JForge: Создаем свою мини-IDE на Java Swing с нуля (с темной темой и подсветкой синтаксиса!) - 5

Метод applyHighlighting вызывается при каждом изменении текста в редакторе. Он сначала сбрасывает все стили к дефолтным, а затем последовательно применяет стили для комментариев, строк и ключевых слов. Порядок важен, чтобы, например, ключевые слова внутри комментариев не подсвечивались как ключевые слова. Конечно, это базовая реализация, и она не учитывает контекст (например, ключевое слово в строке не будет подсвечено как ключевое слово), но для простого редактора это уже неплохо.

5. Компиляция и запуск кода

Одна из ключевых функций IDE [5] – возможность быстро проверить написанный код. JForge [4] использует системный компилятор Java (ToolProvider.getSystemJavaCompiler()) для компиляции .java файлов.

JForge: Создаем свою мини-IDE на Java Swing с нуля (с темной темой и подсветкой синтаксиса!) - 6

Если компиляция проходит успешно, JForge [4] запускает скомпилированный класс с помощью ProcessBuilder. Весь вывод (stdout и stderr) запущенного процесса перенаправляется в consoleArea IDE [5]. Если файл не сохранен или не является .java файлом, JForge предложит сохранить его как TempClass.java и попытается скомпилировать. Важно, чтобы в этом случае публичный класс в редакторе также назывался TempClass.

6. Работа с файлами и пользовательский опыт

Стандартные операции с файлами (New, Open, Save, Save As) реализованы с помощью JFileChooser. При закрытии файла или выходе из приложения JForge [4] проверяет, есть ли несохраненные изменения, и предлагает пользователю сохранить их.

JForge: Создаем свою мини-IDE на Java Swing с нуля (с темной темой и подсветкой синтаксиса!) - 7

Интересный момент – метод editorPanesetTextWithNoUndo. При открытии файла мы не хотим, чтобы вся операция загрузки текста попала в историю UndoManager как одно большое изменение. Поэтому слушатель временно отключается, текст загружается, а затем UndoManager очищается.

Заключение

JForge [4] – это, конечно, не замена мощным современным IDE [5], но он демонстрирует, как с помощью стандартных средств Java Swing можно создать довольно функциональный инструмент для разработки. Проект стал отличной площадкой для изучения тонкостей UIManager, работы с JTextPane и StyledDocument, взаимодействия с системным компилятором и процессами.

Основные моменты, которые удалось реализовать:

  • Полностью кастомная темная тема.

  • Динамическая нумерация строк.

  • Базовая, но рабочая подсветка синтаксиса.

  • Интеграция компиляции и запуска Java-кода.

Надеюсь, этот обзор был интересен и, возможно, вдохновит кого-то на собственные эксперименты со Swing. Код проекта открыт, так что смело заглядывайте на GitHub [4], форкайте, экспериментируйте!

Еще раз ссылка на репозиторий: https://github.com/Jacqquard/JForge-v.0.1A [4]

Автор: jacqquard

Источник [6]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/java/419453

Ссылки в тексте:

[1] https://github.com/Jacqquard: https://github.com/Jacqquard

[2] IntelliJ IDEA: https://www.jetbrains.com/idea/

[3] Swing: https://ru.wikipedia.org/wiki/Swing_(%D0%B1%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA%D0%B0)

[4] JForge: https://github.com/Jacqquard/JForge-v.0.1A

[5] IDE: https://ru.wikipedia.org/wiki/%D0%98%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%B0%D1%8F_%D1%81%D1%80%D0%B5%D0%B4%D0%B0_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B8

[6] Источник: https://habr.com/ru/articles/908534/?utm_source=habrahabr&utm_medium=rss&utm_campaign=908534