Если вы когда-либо использовали Visio или редактор диаграмм классов UML, вы понимаете, чего я пытаюсь добиться: в JFrame пользователи могут добавлять многоточия, окружающие небольшое редактируемое текстовое поле. Эти эллипсы можно перемещать внутри кадра, когда пользователь перетаскивает их. Щелчок по эллипсу приводит к тому, что текст становится редактируемым: появляется карат, возможно выделение подстроки и т. д.
У меня настроена базовая структура: «эллипс» — это автономный компонент с методами, вызываемыми для него из содержащего JFrame и его слушателей. Я пробовал два подхода:
в методе draw() компонента используйте TextLayout, чтобы найти границы, расположить содержащийся текст внутри эллипса и нарисовать его во фрейме с помощью draw() TextLayout. Это быстро. Перетаскивание компонентов в JFrame, наведение мыши и щелчок мышью — все это просто. Однако для функциональности редактирования, похоже, мне нужно будет написать много пользовательского кода для обработки проверки попадания, позиционирования в каратах, выделения текста, переноса строк и т. д.
наличие компонента, содержащего ссылку на содержащий JFrame, и добавление или изменение положения TextComponent в этом JFrame после рисования эллипса. Это имеет преимущество перед всем встроенным поведением TextComponent для редактирования и переноса строк. Но логистика действительно неаккуратна, и позиционирование TextComponent тоже становится беспорядочным, особенно когда пользователь перетаскивает компонент.
Я вполне возможно думаю об этом все неправильно. Может ли кто-нибудь предложить простой способ сделать это, на который я еще не наткнулся?