Как получить FontMetrics только из Font и FontRenderContext - PullRequest
0 голосов
/ 09 марта 2020

В программе, которую я создаю, используются вычисления, связанные со строками, выполненные с помощью FontMetrics. Поскольку FontRenderContext может различаться, требуется правильно выполнять вычисления, и у меня есть сохраненный экземпляр c, чтобы я мог получить к нему доступ в любом месте.

Я нашел способ рассчитать ширину строки, используя шрифт и контекст (без экземпляра Graphics2D):

font.getStringBounds(string, Window.fontRenderContext).getWidth()

Проблема, с которой я сталкиваюсь, - это вычисление спуска, подъема и всего, что предоставляет FontMetrics. Я мог бы:

  • Создать холст, получить его графику, применить к нему все настройки и получить FontMetrics. Потребовалось бы много кода, и он не работал бы стабильно, поскольку Canvas.getGraphics может произвольно возвращать ноль.
  • Задерживать эти вычисления до тех пор, пока не будет запущен мой метод paint (Graphics2D g), где я мог бы напрямую получить FontMetrics.
  • Попробуйте получить необходимые значения из Font.getStringBounds. С сомнением мне удалось бы это сделать.

Меня смущает, что я могу получить getStringBounds только из шрифта и контекста (getStringBounds состоит из значений FontMetrics), но это превращается в такую ​​головную боль, когда мне нужно получить оригинал спуск, подъем и др. c значения.

...