Java: Как динамически вписать нарисованный текст в окно - PullRequest
4 голосов
/ 11 января 2011

я пытаюсь нарисовать большой "привет мир" на моей раме / компоненте. Но я хочу динамически подогнать его под размер окна. Поэтому каждый раз, когда я изменяю размер окна, текст должен идеально вписываться в окно.

Я использую класс FontMetrics, которому я назначаю шрифт и меру высоты и высоты символа.

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

Примерно так:

public int getFontSizeForDrawArea( int width, int height, String text, Font font) {
  //Pseudo class FontMeasureClass takes a font to do the measures with
  FontMeasureClass measure = new FontMeasureClass( font);

  // method takes size of frame/component and text to return the needed 
  // font size to fit text to frame/component
  return measure.getFontSize( width, height, text);
}

Я думаю о создании метода, который измеряет размер текста, пытаясь в цикле, пока размер не будет настолько близок к окнам, как высота и высота Но, может быть, есть что-то готовое к использованию.

Ответы [ 3 ]

2 голосов
/ 11 января 2011

Вы можете рассчитать ширину и нарисовать ваш текст крупным шрифтом и изменить его размер до Graphics2D.scale. Обычно, paintComponent-Method получает объект Graphics2D, поэтому вы можете привести полученный объект Graphics в Graphics2D.

2 голосов
/ 11 января 2011

Один из способов измерения ширины вашей строки в пикселях:

Font myfont = jTextField1.getFont();      
FontMetrics myMetrics = getFontMetrics(myfont);
int width=SwingUtilities.computeStringWidth(myMetrics, jTextField1.getText()); 

, а вот еще один, который дополнительно вычисляет его высоту в пикселях:

Font myFont = new Font("Arial", Font.PLAIN, 10);
FontMetrics myMetrics = new FontMetrics(myFont) {};
Rectangle2D boundsOfString = myMetrics.getStringBounds("Measure this String", null);
int width = (int) boundsOfString.getWidth();
int height = (int) boundsOfString.getHeight();

Я бы сделал это с циклом, который вы упомянули выше.

0 голосов
/ 11 января 2011

Вам не нужно использовать цикл, но вы можете оценить подходящий размер шрифта после одного просчета, поскольку большинство шрифтов пропорционально масштабируются (хотя шрифты могут содержать разные глифы для разных размеров).

например. если ваша область рисования имеет ширину 1000px и вычисленная ширина для шрифта размером 100pt равна 1250px, то размер шрифта 100pt * 1000px / 1250px = 80pt должен привести к ширине 1000px.

...