Хотя это не самое элегантное и надежное решение, вот метод, который будет принимать Font
текущего Graphics
объекта и получать его FontMetrics
, чтобы узнать, где рисовать текст, и, если необходимо, перейти на новую строку:
public void drawString(Graphics g, String s, int x, int y, int width)
{
// FontMetrics gives us information about the width,
// height, etc. of the current Graphics object's Font.
FontMetrics fm = g.getFontMetrics();
int lineHeight = fm.getHeight();
int curX = x;
int curY = y;
String[] words = s.split(" ");
for (String word : words)
{
// Find out thw width of the word.
int wordWidth = fm.stringWidth(word + " ");
// If text exceeds the width, then move to next line.
if (curX + wordWidth >= x + width)
{
curY += lineHeight;
curX = x;
}
g.drawString(word, curX, curY);
// Move over to the right for next word.
curX += wordWidth;
}
}
Эта реализация разделит данный String
на массив String
, используя метод split
с пробелом в качестве единственного разделителя слов, поэтому он, вероятно, не очень устойчив. Предполагается также, что за словом следует пробел, и он действует соответствующим образом при перемещении позиции curX
.
Я бы не рекомендовал использовать эту реализацию на вашем месте, но, вероятно, функции, необходимые для создания другой реализации, все равно будут использовать методы, предоставляемые FontMetrics
классом .