2010-05-05 2 views
1

Как правило, я бы получить графический экземпляр что-то вроде этого:Получение FontMetrics перед тем, как экземпляр Graphics

BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); 
Graphics2D g = img.createGraphics(); 

Однако в текущем проекте я работаю, то width и height переменные выше зависят по размеру нескольких текстовых фрагментов, которые позже будут нарисованы на графическом экземпляре. Но, чтобы получить размеры используемого шрифта, я обычно использовал FontMetrics, который я получаю от графического объекта.

FontMetrics metrics = g.getFontMetrics(); 

Итак, у меня довольно неприятный цикл зависимости. Я не могу создать графический объект, пока не узнаю размер текста, и я не могу знать размер текста, пока у меня не будет графический объект. Одним из решений является создание другой пары BufferedImage/Graphics, чтобы получить нужный мне пример FontMetrics, но это кажется ненужным.

  • Итак, есть ли более хороший способ?
  • Или это тот случай, что свойства ширины, высоты и т. Д. Для шрифта каким-то образом зависят от того, что (графика, компонент ...) текст должен быть нарисован?
+0

У меня была такая же проблема, как и здесь, Том, вы когда-нибудь находили хорошее решение? – m0s

+0

Нет, боюсь, нет. Я просто прибегал к созданию временного объекта Graphics. Мне было бы интересно услышать, если вы найдете лучший способ. –

ответ

0

Возможно, вы можете попробовать получить экземпляр Graphics из другого места. Например, панель, на которой будет нарисовано изображение. Затем вы можете получить экземпляр FontMetrics, используя этот экземпляр Graphic.