Я думаю, что подходящий класс для отображения информации поверх другого компонента - JPopupMenu
, который уже правильно обрабатывает слои для отображения. JPopupMenu имеет метод show()
, который принимает его «родительский» компонент в качестве аргумента, и он будет отображаться в координатном пространстве этого компонента. Поскольку вы хотите отобразить выбор терминов для выбора пользователем, меню кажется подходящим.
Чтобы проверить изменения текста, вы должны добавить DocumentListener
к документу, завернутому в JTextPane
; Вы можете получить к нему доступ, используя getDocument()
.
Чтобы узнать, где находится курсор (на самом деле, курсор), вы можете использовать getCaretPosition()
. Это возвращает позицию каретки в текстовом потоке как int
. Вы можете использовать modelToView()
для перевода этой позиции в фактические (x, y) координаты. Это в свою очередь скажет вам, где показать ваше меню.
Вы можете использовать addKeyListener()
, чтобы перехватывать события клавиатуры на JTextPane
, например, нажимать Ctrl - Пробел .
Комбинация всего, что должно позволить вам делать то, что вы ищете.