在代码中,我正在读取一个 xml 文件并在 JPanel 上相应地绘制内容。如果文件包含标签<LineBreak/>
,我应该在下一个单词之前插入换行符。我以为我可以使用
g.drawString(..)
但这要求我知道休息后会发生什么,在这种情况下,我不知道。有没有其他方法可以通过覆盖 draw 方法来做到这一点?
非常感谢您的帮助。谢谢
在代码中,我正在读取一个 xml 文件并在 JPanel 上相应地绘制内容。如果文件包含标签<LineBreak/>
,我应该在下一个单词之前插入换行符。我以为我可以使用
g.drawString(..)
但这要求我知道休息后会发生什么,在这种情况下,我不知道。有没有其他方法可以通过覆盖 draw 方法来做到这一点?
非常感谢您的帮助。谢谢
我认为您将需要使用FontMetrics ( g.getFontMetrics() ) 来确定显示一行文本所需的垂直像素数。当您调用 drawString 绘制第二行文本时,您必须传递一个y
足够大的值,以使第二行文本绘制在第一行文本下方。
String[] lines = myStringFromXmlDoc.split("\r\n|\r|\n");
int verticalOffset = 0; // your starting offset would probably be more dynamic
foreach(String line : lines)
{
g.drawString(line, 0, verticalOffset);
// use FontMetrics to implement calcLineHeight for yourself
int currentLineHeight = calcLineHeight(line, g);
verticalOffset += currentLineHeight;
}
编辑:
另请参阅java.awt.font.LineBreakMeasurer以获取可能有用的实用程序类。