В программе, которую я создаю, используются вычисления, связанные со строками, выполненные с помощью FontMetrics. Поскольку FontRenderContext может различаться, требуется правильно выполнять вычисления, и у меня есть сохраненный экземпляр c, чтобы я мог получить к нему доступ в любом месте.
Я нашел способ рассчитать ширину строки, используя шрифт и контекст (без экземпляра Graphics2D):
font.getStringBounds(string, Window.fontRenderContext).getWidth()
Проблема, с которой я сталкиваюсь, - это вычисление спуска, подъема и всего, что предоставляет FontMetrics. Я мог бы:
- Создать холст, получить его графику, применить к нему все настройки и получить FontMetrics. Потребовалось бы много кода, и он не работал бы стабильно, поскольку Canvas.getGraphics может произвольно возвращать ноль.
- Задерживать эти вычисления до тех пор, пока не будет запущен мой метод paint (Graphics2D g), где я мог бы напрямую получить FontMetrics.
- Попробуйте получить необходимые значения из Font.getStringBounds. С сомнением мне удалось бы это сделать.
Меня смущает, что я могу получить getStringBounds только из шрифта и контекста (getStringBounds состоит из значений FontMetrics), но это превращается в такую головную боль, когда мне нужно получить оригинал спуск, подъем и др. c значения.